3

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

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

如何使添加没有价值的键成为可能,例如

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

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

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

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

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

4

5 回答 5

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
于 2013-02-13T06:30:10.820 回答
3

我认为您正在寻找的是 Ruby 的 Set 类。根据其描述“Set 实现了一组无重复的无序值。这是 Array 的直观互操作设施和 Hash 的快速查找的混合体”。

http://www.ruby-doc.org/stdlib-2.1.1/libdoc/set/rdoc/Set.html

于 2014-04-04T18:21:22.417 回答
0

您可以将键设置为 nil 值,如下所示:

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.

于 2013-02-14T07:49:03.930 回答
0

使用 MRI Ruby 2.7:hash.without(:this, :that, :the_other)

于 2020-09-04T07:07:00.487 回答
-1

哈希是从键到值的映射。拥有没有值的键的想法不仅是不可能的,甚至没有意义。

于 2013-02-13T11:41:14.527 回答