在散列中查找其值不是给定值的密钥

时间:2015-11-03 16:32:51

标签: ruby hash

如何在散列中找到值不等于给定值的第一个键?给定以下哈希值 #container { display:none; } @media (max-width: 47em) { #container { display: block; } }

100

我想找h = { "a" => 100, "b" => 100, "c" => 800, "d" => 500 }

4 个答案:

答案 0 :(得分:5)

你可以这样做:

no_match_value = 100

h.find { |k,v| v != no_match_value }.first #=> "c"

查找散列中特定位置的键或值是不寻常的,但是(自Ruby v1.9起)你可以这样做。排序由密钥插入顺序确定。直到v1.9,没有排序散列键的概念,就像没有排序集合的元素一样。一些Rubiests认为关键的排序是异端邪说;包括我在内的其他人已经找到了很好的用途。

答案 1 :(得分:1)

您可以使用select

Hash[*h.select {|_, v| v != 100}.first]
#=> {"c"=>800}

如果没有匹配,则返回空哈希{}

如果没有Hash[]部分,它将返回一个包含键和值的数组。

答案 2 :(得分:1)

你可以这样做:

h = { "a" => 100, "b" => 100, "c" => 800, "d" => 500 }
h.reject!{|k,v| v == 100}

# h = {"c"=>800, "d"=>500}

结果散列将包含所有键/值对,其中值不是100。

答案 3 :(得分:0)

假设您要查找密钥,以下代码将起作用:

h = { "a" => 100, "b" => 100, "c" => 800, "d" => 500 }
result = h.detect{ |k,v| v != 100 }.first