ruby为没有值的哈希添加键

时间:2013-02-13 06:24:50

标签: ruby

是否可以在没有值的情况下添加哈希键?所以我创建了一个哈希(@j)并有一个方法:

def add(hash)
@j.merge!(hash) 
end

如何在没有值的情况下添加键,例如

@j.add('fish')
puts @j.entries
puts @j.keywords

=> {'fish' => nil}
=> fish

我当前的代码允许我像这样添加键和值:

 @j.add('fish' => 'animal') 

但不是如果它像上面那样....只有关键

5 个答案:

答案 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)