找出Ruby中数组之间的差异,其中元素是哈希值

时间:2013-08-12 20:18:15

标签: ruby arrays hash

我有两个哈希数组我想找到它们之间的区别。我的问题是数组元素是单项哈希。

到目前为止,使用array1 - array2似乎工作正常但是我需要注意这里的陷阱吗?哈希元素本身的读取方式类似于h = {'ID' => '76322'},其中数值与哈希值不同,所以没有什么太花哨的。

[编辑]

这就是我要找的东西:

array1 = []
array2 = []

h = {'ID' => '76322'}
array1.push(h)

h = {'ID' => '7891'}
array1.push(h)
array2.push(h)

array1 = array1 - array2 # should result in array1 having a single hash of values {'ID', '76322'}

1 个答案:

答案 0 :(得分:4)

array1 - array2的工作原理是将array2的元素放入临时哈希,然后返回未出现在哈希中的array1的所有元素。使用==比较散列元素以确定它们是否匹配。

如果哈希的所有键和值都使用==匹配,则使用true比较两个哈希值会==。所以

h1 = {'ID' => '7891'}
h2 = {'ID' => '7891'}
h1 == h2

评估为true,即使h1h2是不同的哈希值,也会正确删除相应的元素。

我能想到的唯一考虑因素是你总是在散列键和值中到处都有字符串。如果它们有时是整数或符号,例如{:ID => 7891},那么您将无法获得所需的结果,因为:ID == 'ID''7891' == 7891都是 false