你知道一个优美的 Ruby 方法来查找哈希表中是否存在特定的键吗?
h = {:a => 1, :c => 3, :d => 4}
# keys to find are :a, :b or :e
我知道我可以做一个:
h.key?(:a) || h.key?(:b) || h.key?(:e)
但我想知道是否有更好看的方法来做这件事!:)
非常感谢!
你知道一个优美的 Ruby 方法来查找哈希表中是否存在特定的键吗?
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
编程愉快。
.all?
。 - Mike Campbell以下是如何从数组中获取所有匹配的键:
> {: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
.empty?
。 - Andrew Grimm.any?
检查相反的情况。 - famousgarkin[: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?
你将会得到匹配键的哈希值(键和值),而且不会是空的吗?
O(k*n)
,其中k
是哈希中键的数量,n
是要尝试查找的具有键序列的长度。 - user166390