如何找到哈希值中第一個不等於給定值的密鑰?鑑於以下哈希和價值100
,找到一個哈希值不是給定值的密鑰
h = { "a" => 100, "b" => 100, "c" => 800, "d" => 500 }
我想找到"c" => 800
。
如何找到哈希值中第一個不等於給定值的密鑰?鑑於以下哈希和價值100
,找到一個哈希值不是給定值的密鑰
h = { "a" => 100, "b" => 100, "c" => 800, "d" => 500 }
我想找到"c" => 800
。
你可以這樣做:
no_match_value = 100
h.find { |k,v| v != no_match_value }.first #=> "c"
這是不尋常的是尋找位於散列中特定位置的鍵或值,但是(自Ruby v1.9起),您可以做到這一點。排序由密鑰插入順序決定。在v1.9之前,沒有排序哈希鍵的概念,就像集合中的元素沒有排序一樣。一些Rubiests認爲關鍵命令是異端邪說;其他人,包括我自己在內,都找到了很好的用途。
@Anthony,我認爲你的意思是作爲替代'.first'。 (當然,它不是更有效率,因爲只要塊評估爲「真」,find就會停止)。你也可以編寫'h.each_key.find {| k | h [k]!= no_match_value}'。 –
您可以使用select
Hash[*h.select {|_, v| v != 100}.first]
#=> {"c"=>800}
如果沒有匹配它返回一個空哈希{}
。
沒有Hash[]
部分,它會返回一個帶有鍵和值的數組。
加上'.first'拿第一個 –
'detect' /'find'會更合適:) –
@SergioTulentsev,爲什麼更好? –
你可以這樣做:
h = { "a" => 100, "b" => 100, "c" => 800, "d" => 500 }
h.reject!{|k,v| v == 100}
# h = {"c"=>800, "d"=>500}
所生成的散列將所有鍵/值對其中的值不是100
假設你想找到鑰匙,下面的代碼將工作:
h = { "a" => 100, "b" => 100, "c" => 800, "d" => 500 }
result = h.detect{ |k,v| v != 100 }.first
你的問題不明確。 '「c」=> 800'不是Ruby對象。我們可以猜測你想要的關鍵是「c」或者「800」,或者是散列「{」c「=> 800}」,但是哪個? – sawa