У меня есть программа, которая будет хранить много экземпляров одного класса, пусть говорят до 10.000 или более. У экземпляров класса есть несколько свойств, которые мне нужны время от времени, но их наиболее важным является идентификатор.
class Document
attr_accessor :id
def ==(document)
document.id == self.id
end
end
Теперь, каков самый быстрый способ хранения тысяч этих объектов?
Я использовал их для размещения в массив документов:
documents = Array.new
documents << Document.new
# etc
Теперь альтернативой было бы хранить их в Hash:
documents = Hash.new
doc = Document.new
documents[doc.id] = doc
# etc
В моем приложении мне в основном нужно выяснить, существует ли вообще документ. Является ли функция Hash has_key?
значительно быстрее, чем линейный поиск массива и сравнение объектов Document
? Оба внутри O (n) или равно has_key?
даже O (1). Я увижу разницу?
Кроме того, иногда мне нужно добавлять документы, когда они уже существуют. Когда я использую Array, мне нужно будет проверить с помощью include?
раньше, когда я использую Hash, я бы просто использовал has_key?
снова. Тот же вопрос, что и выше.
Каковы ваши мысли? Какой самый быстрый способ хранения больших объемов данных, когда 90% времени мне нужно знать только, существует ли идентификатор (а не сам объект!)