У меня есть программа, которая будет хранить много экземпляров одного класса, скажем, до 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?
значительно быстрее, чем линейный поиск в массиве и сравнение Document
объектов?Оба находятся в пределах O (n) или has_key?
даже O (1) .Смогу ли я увидеть разницу?
Кроме того, иногда мне нужно добавлять документы, когда они уже существуют.Когда я использую массив, мне нужно было бы проверить с include?
раньше, когда я использую хэш, я просто снова использую has_key?
.Тот же вопрос, что и выше.
Что вы думаете?Какой самый быстрый способ хранения больших объемов данных, когда в 90% случаев мне нужно только знать, существует ли идентификатор (не сам объект!)