Ruby如何向哈希表中添加没有值的键?

4

在哈希表中是否可以添加没有值的键?我创建了一个哈希表(@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
什么意义呢?你想要一套替代品吗? - Dave Newton
如果你像这样定义哈希 my_hash = Hash.new { | k, v | k[ v ] = nil } …… 当你查询一个未定义的键时,它会返回 nil :-) - Giovanni Benussi
5个回答

4
您可以添加一个空值的哈希表:
@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

OP想要“添加键,但不带值”。 - Zabba

3

0

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

h = Hash.new

h["nil_key"] = nil

h.keys # => ["nil_key"]

在你的例子中,你可以像这样定义它:
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"]

只需确保您在定义 @j 实例变量的任何类中定义 #add。


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

-1
哈希是从键到值的映射。没有值的键的想法不仅不可能,而且毫无意义。

3
可以的。例如:创建哈希(Hash)以添加到 CSV 文件中,这是有意义的。计算每个键可能不会返回 { key => nil }(DRY 代码)。为了确保 CSV 将哈希的值添加到正确的列中,最好在事先初始化键。 - Katarzyna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接