在Ruby中搜索哈希键的干净方法

时间:2013-12-13 14:00:47

标签: ruby arrays hash

我有这样的哈希:

hash = {"jonathan" => "12", "bob" => 15 }

然后我有一个像这样的数组:

array = ['jon', 'bob']

我想在最后返回包含数组中值的键的值。

目标是这样的:

array.each do |name|
  if hash.key.include? name
  return hash.value
end

编写该代码块的最佳方法是什么?

4 个答案:

答案 0 :(得分:1)

要获取密钥,您不需要阻止,这样做:

hash.keys & array

这将获取哈希的键并将其与数组相交。

第二部分,从哈希值中获取一个值:

hash[(hash.keys & array).last]

这将获得hasharray中共享的最后一个密钥,并在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]