相关疑难解决方法(0)

Ruby中数组和哈希的性能

我有一个程序可以存储一个类的许多实例,比方说高达10.000或更多.类实例有不时需要的几个属性,但最重要的属性是ID.

class Document
  attr_accessor :id
  def ==(document)
    document.id == self.id
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,存储数千个这些对象的最快方法是什么?

我曾经将它们全部放入一个文档数组中:

documents = Array.new
documents << Document.new
# etc
Run Code Online (Sandbox Code Playgroud)

现在另一种方法是将它们存储在Hash中:

documents = Hash.new
doc = Document.new
documents[doc.id] = doc
# etc
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我主要需要找出文档是否存在.哈希的has_key?函数是否明显快于数组的线性搜索和Document对象的比较?都在O(n)内has_key?甚至是O(1).我会看到区别吗?

此外,有时我需要在文档已经存在时添加它.当我使用数组时,我必须先检查include?,当我使用哈希时,我只是has_key?再次使用.与上述问题相同.

你的想法是什么?什么是存储大量数据的最快方法,90%的时间我只需要知道ID是否存在(而不是对象本身!)

ruby arrays hash performance

38
推荐指数
3
解决办法
2万
查看次数

标签 统计

arrays ×1

hash ×1

performance ×1

ruby ×1