I have an array of hashes:
[{"green" => 1, "red" => 2, "blue" => 3}, {"green" => 4, "red" => 5, "blue" => 6}]
I want to select the hash in which either red, blue or green is equal to a certain number. How would I go about doing this?
If I understood You correctly.
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} }
Improved version:
arr.select { |el| a.has_value?(some_number) }
Version if there could be more keys that don't need to be tested (yellow in example):
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 } }
I'd use Hash#values_at to get an array of the values associated with the keys you're interested in:
arr = [{"green" => 1, "red" => 2, "blue" => 3}, {"green" => 4, "red" => 5, "blue" => 6}]
arr.select { |h| h.values_at("red", "green", "blue").include? 1 }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With