如果key不存在,则创建默认值

Ste*_*eve 34 ruby hash

任何人都可以向我展示一种检查哈希中是否存在密钥的红宝石方法,如果没有,则为其提供默认值.我假设有一个衬垫使用,除非这样做,但我不知道该使用什么.

Mic*_*ohl 49

如果您已经有哈希,可以这样做:

h.fetch(key, "default value")
Run Code Online (Sandbox Code Playgroud)

或者您利用了一个不存在的密钥将返回的事实nil:

h[key] || "default value"
Run Code Online (Sandbox Code Playgroud)

要使用默认值创建哈希,它取决于您要完全执行的操作.

  • 使用h [key] || "默认值"不保存,如果已经存在false,则会被覆盖 (3认同)
  • 这就是为什么我将其列为几种可能性之一。通常人们确实知道他们的哈希值会是什么样子,如果你知道你不会保存布尔值,这是一个非常好的方法。 (3认同)

nkm*_*nkm 19

Hash类的构造函数接受默认值,如果找不到匹配的键,则返回相同的值.

h = Hash.new("default")

h.has_key?("jake")
=> false

h["jake"]
=> "default"

h["jake"] = "26"
h.has_key?("jake")
=> true
Run Code Online (Sandbox Code Playgroud)


KL-*_*L-7 13

如果您不需要将该默认值存储到哈希中,则可以使用以下Hash#fetch方法:

hash = {}
hash.fetch(:some_key, 'default-value') # => 'default-value'
p hash
# => {}
Run Code Online (Sandbox Code Playgroud)

如果除了每次访问不存在的密钥时都需要存储默认值,并且您是初始化哈希的那个,您可以使用Hash#new块来执行:

hash = Hash.new { |hash, key| hash[key] = 'default-value' }
hash[:a] = 'foo'
p hash[:b]
# => 'default-value'
p hash
# => { :a => 'foo', :b => 'default-value' }
Run Code Online (Sandbox Code Playgroud)


Mat*_*ijs 7

您可以使用||=运营商:

hash   = {some_key: 'some_value'}
puts hash[:some_key] ||= 'default_value'         # prints 'some_value'
puts hash[:non_existing_key] ||= 'default_value' # prints 'default_value'
puts hash.inspect # {:some_key=>"some_value", :non_existing_key=>"default_value"}
Run Code Online (Sandbox Code Playgroud)


pha*_*ann 5

如果要存储可能为nil的默认值,则需要在存储时计算它:

hash = {}
...
hash.fetch(key) {|k| hash[k] = calc_default()}
Run Code Online (Sandbox Code Playgroud)