2010-08-12 84 views
0

我有两个类似于下面的结构。在红宝石中比较散列的哈希值

[1 => [{'pc'=>1,'id'=>0},{'pc'=>4,'id'=>0},{'pc'=>2,'id'=>1]] 

但是他们都不需要以完全相同的顺序包含内部数组。在这种情况下如何比较?

+0

首先考虑转换阵列来套的话,顺序无关紧要。 – jtbandes 2010-08-12 05:18:30

+0

你需要考虑列表中的重复项吗? – 2010-08-12 12:12:43

回答

1

如果顺序不重要,则应考虑其他结构而不是Array,例如Set

可以使用SET比较中,通过比较之前数组转换为集:

require 'set' 
a = [{:a => 2}, {:b => 3}] 
b = [{:b => 3}, {:a => 2}] 

sa = Set.new a 
#=> #<Set: {{:a=>2}, {:b=>3}}> 
sb = Set.new b 
#=> #<Set: {{:b=>3}, {:a=>2}}> 

a == b 
#=> false 
sa == sb 
#=> true 
0

这似乎是一个简单的比较工作:

data = { 
    1 => [{'pc'=>1,'id'=>0},{'pc'=>4,'id'=>0},{'pc'=>2,'id'=>1}], 
    2 => [{'pc'=>1,'id'=>0},{'pc'=>4,'id'=>0},{'pc'=>2,'id'=>1}], 
    3 => [{'pc'=>1,'id'=>0},{'pc'=>2,'id'=>1},{'pc'=>4,'id'=>0}] 
} 
data[1] == data[2] 
#> true 
data[2] == data[3] 
#> false