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

时间:2012-02-02 07:31:43

标签: ruby hash

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

5 个答案:

答案 0 :(得分:47)

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

h.fetch(key, "default value")

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

的事实
h[key] || "default value"

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

  • 独立于密钥且不会被存储:

    h = Hash.new("foo")
    h[1] #=> "foo"
    h #=> {}
    
  • 取决于密钥并将被存储:

    h = Hash.new { |h, k| h[k] = k * k } 
    h[2] #=> 4
    h #=> {2=>4}
    

答案 1 :(得分:19)

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

h = Hash.new("default")

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

h["jake"]
=> "default"

h["jake"] = "26"
h.has_key?("jake")
=> true

答案 2 :(得分:13)

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

hash = {}
hash.fetch(:some_key, 'default-value') # => 'default-value'
p hash
# => {}

如果您每次访问不存在的密钥时都需要存储默认值,并且您是初始化哈希值的人,则可以使用带有块的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' }

答案 3 :(得分:6)

您可以使用||=运算符:

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"}

答案 4 :(得分:5)

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

hash = {}
...
hash.fetch(key) {|k| hash[k] = calc_default()}