是否可以获取数组的交集而只是哈希的键?
我知道&
运算符返回两个数组的交集,但我想使用值而不是value + key
组合。
让我们说,我有一个数组和一个哈希:
a1 = [ 'test1', 'test2', 'test3' ]
a2 = { 'test3' => 'value3', 'test4'=>'value4', 'test5'=>'value5' }
有没有办法从这些中返回value3
?
答案 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]}
应该按照你的要求做。