Ruby可以处理大型哈希对象

时间:2011-11-23 12:18:04

标签: ruby hash

我想比较两个哈希值。每个可以有超过20,000个对象。

我有以下问题:

  • Ruby可以处理如此大量的对象吗?
  • 比较这两个哈希会花费很多时间吗?
  • 可以应用索引来减少枚举吗?

2 个答案:

答案 0 :(得分:4)

哈希本身很快并且不受限制。例如。这甚至不需要一毫秒(Windows上的Ruby 1.9.2):

irb(main):008:0> hash1 = (0...20000).inject({}) { | r, i | r[rand(100)*100000 + i] = rand; r } ; 23
=> 23
irb(main):009:0> hash2 = (0...20000).inject({}) { | r, i | r[rand(100)*100000 + i] = rand; r } ; 23
=> 23
irb(main):010:0> hash3 = hash1.dup ; 23
=> 23
irb(main):011:0> hash1 == hash2
=> false
irb(main):012:0> hash1 == hash3
=> true

其他一切都取决于你填入哈希的内容。

答案 1 :(得分:2)

Rails是一个框架,与对象比较几乎没有关系。 Ruby肯定能够比较20,000个对象,假设它们很好地适应内存,或者您在批处理过程中比较它们,这限制了随时实例化的数量。

如果您正在讨论比较20,000个ActiveRecord对象内存,您可能会耗尽内存,即使您没有,也可能会遇到相当慢的结果。 ActiveRecord非常重,并不是处理大量对象的最佳工具。但是,我不知道这些20,000个对象是什么或者你是如何比较它们的,所以也许它们不必同时在内存中,批处理可以在你认为可接受的时间范围内完成。< / p>

如果这些是简单ruby散列中的简单对象,你肯定可以很快地遍历它们(虽然快速完全取决于 )。如果您的比较逻辑非常简单,那么假设第一个哈希中的每个对象都与第二个哈希中的单个对应对象进行比较,那么它应该不会太耗时。如果将散列1中的每个对象与散列2中的20,000中的每一个进行比较,那么您的总比较(20,000 * 20,0000)要大得多,这可能没有您所需的那么快。