我有一系列哈希:
[{"green" => 1, "red" => 2, "blue" => 3}, {"green" => 4, "red" => 5, "blue" => 6}]
我想选择红色,蓝色或绿色等于某个数字的哈希值。我该怎么做呢?
答案 0 :(得分:5)
如果我理解你的话。
arr = [{"green" => 1, "red" => 2, "blue" => 3}, {"green" => 4, "red" => 5, "blue" => 6}]
some_number = 1
arr.select { |el| el.any? {|k,v| v == some_number} }
改进版本:
arr.select { |el| a.has_value?(some_number) }
版本,如果有更多的密钥不需要测试(例如黄色):
arr = [{"green" => 1, "red" => 2, "blue" => 3, "yellow" => 5}, {"green" => 4, "red" => 5, "blue" => 6, "yellow" => 3}]
some_number = 1
fields_to_check = ["red", "green", "blue" ]
arr.select { |el| fields_to_check.any? {|color| el[color] == some_number } }
答案 1 :(得分:3)
我使用Hash#values_at
来获取与您感兴趣的键相关联的值数组:
arr = [{"green" => 1, "red" => 2, "blue" => 3}, {"green" => 4, "red" => 5, "blue" => 6}]
arr.select { |h| h.values_at("red", "green", "blue").include? 1 }
答案 2 :(得分:1)
如果您想要在任何键的值等于n
arr.select{|h| h.values.include? n}
选择其中一个指定键的值是否等于n
arr.select{|h| h.select{|k,v| ("red","green","blue").include? k && v == n}