你知道一个非常红宝石的方法来查找散列是否有某些键?
h = {:a => 1, :c => 3, :d => 4}
# keys to find are :a, :b or :e
我知道我可以做:
h.key?(:a) || h.key?(:b) || h.key?(:e)
但我想知道是否有更漂亮的方法来做到这一点! :)
非常感谢!
答案 0 :(得分:36)
[: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
快乐的编码。
答案 1 :(得分:13)
以下是从阵列中获取所有匹配键的方法:
> {:a => 1, :c => 3, :d => 4}.keys & [:a, :d, :e]
=> [:a, :d]
如果你想要一个布尔值(遵循安德鲁的建议):
> ({:a => 1, :c => 3, :d => 4}.keys & [:a, :d, :e]).empty?
=> false
> ({:a => 1, :c => 3, :d => 4}.keys & [:f, :e]).empty?
=> true
答案 2 :(得分:2)
我会做这样的事情:
[:a, :b, :e].any?{ |val| h.key?(val) }
答案 3 :(得分:1)
h.select{|k| [:b, :w, :e].include?(k) }.empty?
h.select{|k| [:a, :w, :e].include?(k) }.empty?
你得到匹配键的哈希(键和值)(没有空?)