Ruby:我有两个哈希数组,如何在两个哈希中计算具有相同id的元素?

时间:2014-02-26 16:53:49

标签: ruby arrays hash

我在Ruby中有两个哈希数组,如

[{id: 1, a:2, b:3, c:4},{id:2, a:8, b:10, c:12}]
[{id: 1, a:3, b:8, c:9},{id:2, a:8, b:18, c:20},{id:3, a:10, b:15, c:29}]

我希望找到有多少对元素(每个数组一个)具有相同的id和相同的a,在这种情况下它只有一个(id为2且a:8的那些)

有没有一种有效的方法来计算它?

提前致谢

2 个答案:

答案 0 :(得分:4)

a1 = [{id: 1, a:2, b:3, c:4},{id:2, a:8, b:10, c:12}]
a2 = [{id: 1, a:3, b:8, c:9},{id:2, a:8, b:18, c:20},{id:3, a:10, b:15, c:29}]

(a1.map{|h| [h[:id], h[:a]]} & a2.map{|h| [h[:id], h[:a]]}).length
# => 1

答案 1 :(得分:0)

一种非常容易扩展的变体,比较哪些属性:

x = [{id: 1, a:2, b:3, c:4},{id:2, a:8, b:10, c:12}]
y = [{id: 1, a:3, b:8, c:9},{id:2, a:8, b:18, c:20},{id:3, a:10, b:15, c:29}]

x.product(y).count { |p| [:id,:a].all? { |k| p[0][k]==p[1][k] } }