2013-12-13 105 views
1

我有一個哈希值,像這樣:乾淨的方式通過哈希鍵搜索在Ruby中

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

然後,我有一個數組,像這樣:

array = ['jon', 'bob']

我想要回最後在數組中包含一個值的鍵的值。

的目標是這樣的:

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

什麼編寫代碼塊的最佳方式?

回答

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] 
1

爲了拿到鑰匙,你不需要一個塊,這會做:

hash.keys & array 

這需要哈希的鍵與陣列交叉處。

第二部分,從哈希得到的值:

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

這會得到在hasharray共享並返回hash該鍵值的最後一個鍵。

1

您也可以使用Hashselect方法:

hash.select {| k,_ | array.include?(k) } 
# => {"bob"=>15} 

,並得到爲例如,上一個值:

hash.select {| k,_ | array.include?(k) }.to_a.flatten.last 
# => 15 

,甚至使用的Hashvalues_at方法:

hash.values_at(*array).compact.last 
# => 15 
0

這裏是我會寫:

hash = {"jonathan" => "12", "bob" => 15 } 
array = ['jon', 'bob'] 
array.collect(&hash.method(:[])).compact # => [15]