是否可以在没有值的情况下添加哈希键?所以我创建了一个哈希(@j)并有一个方法:
def add(hash)
@j.merge!(hash)
end
如何在没有值的情况下添加键,例如
@j.add('fish')
puts @j.entries
puts @j.keywords
=> {'fish' => nil}
=> fish
我当前的代码允许我像这样添加键和值:
@j.add('fish' => 'animal')
但不是如果它像上面那样....只有关键
答案 0 :(得分:3)
您可以为值添加带有nil的哈希:
@j.add {:key => nil}
或编辑您的添加方法:
def add(key_or_hash)
hash = key_or_hash.is_a?(Hash) ? key_or_hash : {key_or_hash.to_sym => nil}
@j.merge! hash
end
答案 1 :(得分:2)
我认为你正在寻找的是Ruby的Set类。从其描述“Set实现了无序值的集合,没有重复。这是Array的直观互操作设施和Hash的快速查找的混合体。”
http://www.ruby-doc.org/stdlib-2.1.1/libdoc/set/rdoc/Set.html
答案 2 :(得分:0)
哈希是从键到值的映射。拥有一个没有价值的钥匙的想法不仅是不可能的,它甚至没有意义。
答案 3 :(得分:0)
您可以将密钥设置为零值,如下所示:
h = Hash.new
h["nil_key"] = nil
h.keys # => ["nil_key"]
in your example you could define it like this
def add(key, value = nil)
h = { key => value }
@j.merge!(h)
end
@j = { :a_key => "a_value" }
@j.add("fish")
@j.keys # => [:a_key, "fish"]
@j.add("another_key", "another_value")
@j.keys # => [:a_key, "fish", "another_key"]
@j # => [ :a_key => "a_value", "fish" => nil, "another_key" => "another_value"]
just make sure you define #add in whatever class the @j instance variable is defined in.
h = Hash.new
h["nil_key"] = nil
h.keys # => ["nil_key"]
答案 4 :(得分:0)
使用MRI Ruby 2.7:hash.without(:this, :that, :the_other)