Ruby选择具有多个条件

时间:2013-10-16 14:08:15

标签: ruby

我有一系列哈希:

[{"green" => 1, "red" => 2, "blue" => 3}, {"green" => 4, "red" => 5, "blue" => 6}]

我想选择红色,蓝色或绿色等于某个数字的哈希值。我该怎么做呢?

3 个答案:

答案 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}