2014-02-26 43 views
0

我在Ruby的散列值的兩個陣列狀Ruby:我有兩個散列數組,我如何計算兩個散列中具有相同ID的元素?

[{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和相同的一個,在這種情況下,只有一個(那些id:2和a:8)

有沒有一種有效的方法來計算這個?

在此先感謝

+1

請提供到目前爲止你已經嘗試了什麼,爲什麼解釋的例子這不適合你,以及你的預期產出的樣本。 –

回答

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] } } 
+0

我還是不明白這個問題......--( –

相關問題