使用默认密钥创建新哈希

Jer*_*ith 10 ruby ruby-on-rails

我想创建一个带有来自数组的索引的哈希.

ary = ["a", "b", "c"]
h = Hash.new(ary.each{|a| h[a] = 0})
Run Code Online (Sandbox Code Playgroud)

我的目标是从这样的哈希开始:

h = {"a"=>0, "b"=>0, "c"=>0}
Run Code Online (Sandbox Code Playgroud)

以便稍后当哈希值发生变化时,我可以使用h.default重置它

不幸的是,我设置哈希的方式不起作用......任何想法?

McS*_*tch 10

您应该h首先实例化您的哈希,然后用数组的内容填充它:

h = {}    
ary = ["a", "b", "c"]
ary.each{|a| h[a] = 0}
Run Code Online (Sandbox Code Playgroud)


Har*_*tty 5

使用散列的默认值功能

h = Hash.new(0)

h["a"]      # => 0
Run Code Online (Sandbox Code Playgroud)

在这种方法中,没有设置密钥.

h.key?("a") # => false
Run Code Online (Sandbox Code Playgroud)

其他方法是在访问时设置丢失的密钥.

h = Hash.new {|h, k| h[k] = 0}
h["a"]      # => 0
h.key?("a") # => true
Run Code Online (Sandbox Code Playgroud)

即使在这种方法中,key?如果您之前没有访问过密钥,操作也会失败.

h.key?("b") # => false
h["b"]      # => 0
h.key?("b") # => true
Run Code Online (Sandbox Code Playgroud)

你总是可以使用具有最小边界条件的蛮力.

h = Hash.new.tap {|h| ["a", "b", "c"].each{|k| h[k] = 0}}
h.key?("b") # => true
h["b"]      # => 0
Run Code Online (Sandbox Code Playgroud)