Ответ 1
Рассмотрим Enumerable.any?
[:a, :b, :e].any? {|k| h.key?(k)}
Из IRB:
>> h = {:a => 1}; [:x].any? {|k| h.key?(k)} => false >> h = {:a => 1}; [:x, :a].any? {|k| h.key?(k)} => true
Счастливое кодирование.
Знаете ли вы довольно рубиновый способ узнать, имеет ли хэш один из ключей?
h = {:a => 1, :c => 3, :d => 4}
# keys to find are :a, :b or :e
Я знаю, что могу сделать:
h.key?(:a) || h.key?(:b) || h.key?(:e)
Но мне было интересно, есть ли более красивый способ сделать это!:)
Спасибо большое!
Рассмотрим Enumerable.any?
[:a, :b, :e].any? {|k| h.key?(k)}
Из IRB:
>> h = {:a => 1}; [:x].any? {|k| h.key?(k)} => false >> h = {:a => 1}; [:x, :a].any? {|k| h.key?(k)} => true
Счастливое кодирование.
Вот как вы получаете все соответствующие ключи из массива:
> {:a => 1, :c => 3, :d => 4}.keys & [:a, :d, :e]
=> [:a, :d]
и если вы хотите логическое (следующее предложение Andrew):
> ({:a => 1, :c => 3, :d => 4}.keys & [:a, :d, :e]).empty?
=> false
> ({:a => 1, :c => 3, :d => 4}.keys & [:f, :e]).empty?
=> true
Я бы сделал что-то вроде этого:
[:a, :b, :e].any?{ |val| h.key?(val) }
h.select{|k| [:b, :w, :e].include?(k) }.empty?
h.select{|k| [:a, :w, :e].include?(k) }.empty?
И вы получаете хеш (ключ и значение) совпадающего ключа в возврате (без пустого?)