ruby数组和散列键的交集

时间:2016-05-02 17:25:54

标签: arrays ruby hash

是否可以获取数组的交集而只是哈希的键?

我知道&运算符返回两个数组的交集,但我想使用值而不是value + key组合。

让我们说,我有一个数组和一个哈希:

a1 = [ 'test1', 'test2', 'test3' ]
a2 = { 'test3' => 'value3', 'test4'=>'value4', 'test5'=>'value5' }

有没有办法从这些中返回value3

3 个答案:

答案 0 :(得分:2)

给定的

arr = ['value1', 'value2', 'value3']
hsh = {:key1 => 'value3', :key2=>'value4', :key3=>'value5'}

您可以使用.values方法将hsh转换为值数组,并使用&运算符将哈希值与数组进行比较。

arr & hsh.values

=> ["value3"]

答案 1 :(得分:2)

这可能是我能想到的最直观的方式来做你所要求的:

a1 = [ 'test1', 'test2', 'test3' ]
a2 = { 'test3' => 'value3', 'test4'=>'value4', 'test5'=>'value5' }

(a1 & a2.keys).map { |e| a2[e] }
#=> ["value3"]

# or

a1.select { |e| a2[e] }
#=> ["value3"]

那就是你想要a1和来自a2的密钥的交集。然后,您可以使用map对交叉点中找到的每个键执行查找以返回值。

答案 2 :(得分:0)

a1.reduce(nil) {|r, k| r || a2[k]}应该按照你的要求做。