我有这样的哈希:
hash = {"jonathan" => "12", "bob" => 15 }
然后我有一个像这样的数组:
array = ['jon', 'bob']
我想在最后返回包含数组中值的键的值。
目标是这样的:
array.each do |name|
if hash.key.include? name
return hash.value
end
编写该代码块的最佳方法是什么?
答案 0 :(得分:1)
要获取密钥,您不需要阻止,这样做:
hash.keys & array
这将获取哈希的键并将其与数组相交。
第二部分,从哈希值中获取一个值:
hash[(hash.keys & array).last]
这将获得hash
和array
中共享的最后一个密钥,并在hash
中返回该密钥的值。
答案 1 :(得分:1)
如果您想要多个值,请使用Hash#values_at
:
hash = {"jonathan" => "12", "bob" => 15 }
array = ['jon', 'bob']
hash.values_at(*array.select{|key| hash.has_key? key})
# => [15]
使用Array#&
:
hash.values_at(*(hash.keys & array))
# => [15]
答案 2 :(得分:1)
您还可以使用select
的{{1}}方法:
Hash
并获得,例如,最后一个值:
hash.select {| k,_ | array.include?( k ) }
# => {"bob"=>15}
甚至使用hash.select {| k,_ | array.include?( k ) }.to_a.flatten.last
# => 15
的{{1}}方法:
values_at
答案 3 :(得分:0)
以下是我的写作方式:
hash = {"jonathan" => "12", "bob" => 15 }
array = ['jon', 'bob']
array.collect(&hash.method(:[])).compact # => [15]