我有一個哈希值,像這樣:乾淨的方式通過哈希鍵搜索在Ruby中
hash = {"jonathan" => "12", "bob" => 15 }
然後,我有一個數組,像這樣:
array = ['jon', 'bob']
我想要回最後在數組中包含一個值的鍵的值。
的目標是這樣的:
array.each do |name|
if hash.key.include? name
return hash.value
end
什麼編寫代碼塊的最佳方式?
我有一個哈希值,像這樣:乾淨的方式通過哈希鍵搜索在Ruby中
hash = {"jonathan" => "12", "bob" => 15 }
然後,我有一個數組,像這樣:
array = ['jon', 'bob']
我想要回最後在數組中包含一個值的鍵的值。
的目標是這樣的:
array.each do |name|
if hash.key.include? name
return hash.value
end
什麼編寫代碼塊的最佳方式?
如果需要多個值,請使用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]
爲了拿到鑰匙,你不需要一個塊,這會做:
hash.keys & array
這需要哈希的鍵與陣列交叉處。
第二部分,從哈希得到的值:
hash[(hash.keys & array).last]
這會得到在hash
和array
共享並返回hash
該鍵值的最後一個鍵。
您也可以使用Hash
select
方法:
hash.select {| k,_ | array.include?(k) }
# => {"bob"=>15}
,並得到爲例如,上一個值:
hash.select {| k,_ | array.include?(k) }.to_a.flatten.last
# => 15
,甚至使用的Hash
values_at
方法:
hash.values_at(*array).compact.last
# => 15
這裏是我會寫:
hash = {"jonathan" => "12", "bob" => 15 }
array = ['jon', 'bob']
array.collect(&hash.method(:[])).compact # => [15]