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