测试散列是否具有多个键中的任何一个

Tre*_*wak 22 ruby hash

我想知道是否有更好的方法来测试散列是否有来自数组的任何键.我想用它这样的东西:

keys = %w[k1 k2 k5 k6]
none = true if hash.key?(keys)
Run Code Online (Sandbox Code Playgroud)

或者我将不得不循环这个?

von*_*rad 72

无需循环:

(hash.keys & keys).any? # => true
Run Code Online (Sandbox Code Playgroud)

说明:

.keys将哈希中的所有键作为数组返回.&相交两个数组,返回两个数组中存在的任何对象.最后,.any?检查数组是否有任何值.

  • 嗯...没有循环你自己,但幕后的过度杀戮测试.它仍然是一个优雅的答案,但不一定是绝对最高效的. (3认同)

Nak*_*lon 8

keys.any? { |i| hash.has_key? i }
Run Code Online (Sandbox Code Playgroud)