确定哈希是否包含一组键中的任何键?

jri*_*lai 23 ruby hash

你知道一个漂亮的ruby方法来查找散列是否有某些键?

h = {:a => 1, :c => 3, :d => 4}
# keys to find are :a, :b or :e
Run Code Online (Sandbox Code Playgroud)

我知道我可以做一个:

h.key?(:a) || h.key?(:b) || h.key?(:e)
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更漂亮的方法来做到这一点!:)

非常感谢 !

小智 37

考虑 Enumerable.any?

[:a, :b, :e].any? {|k| h.key?(k)}
Run Code Online (Sandbox Code Playgroud)

来自IRB:

>> h = {:a => 1}; [:x].any? {|k| h.key?(k)}                    
=> false                                                                
>> h = {:a => 1}; [:x, :a].any? {|k| h.key?(k)}                
=> true

快乐的编码.

  • 当然,如果您想查看它是否具有指定的所有键,请使用`.all?` :)。 (2认同)

Wes*_*Wes 13

以下是从数组中获取所有匹配键的方法:

> {:a => 1, :c => 3, :d => 4}.keys & [:a, :d, :e]
 => [:a, :d] 
Run Code Online (Sandbox Code Playgroud)

如果你想要一个布尔值(遵循安德鲁的建议):

> ({:a => 1, :c => 3, :d => 4}.keys & [:a, :d, :e]).empty?
 => false 
> ({:a => 1, :c => 3, :d => 4}.keys & [:f, :e]).empty?
 => true 
Run Code Online (Sandbox Code Playgroud)

  • @pst:你可以使用`.empty?`,如果你只想要一个布尔值. (2认同)