我想要一个哈希值,该值包含从1到18的整数作为键。我希望哈希看起来像这样:
myHash = Hash.new
myHash[1] = "free"
myHash[2] = "free"
...
myHash[18] = "free"
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的方法可以做到这一点,例如使用for循环。将类似:
myHash = Hash.new
for i in 1..18
myHash[i] = "free"
Run Code Online (Sandbox Code Playgroud)
工作,还是只创建18个称为i?
hash = {}
(1..18).each { |i| hash[i] = 'free' }
hash
#=> { 1=>"free", 2=>"free", 3=>"free", 4=>"free", 5=>"free", 6=>"free",
# 7=>"free", 8=>"free", 9=>"free", 10=>"free", 11=>"free", 12=>"free",
# 13=>"free", 14=>"free", 15=>"free", 16=>"free", 17=>"free", 18=>"free"}
Run Code Online (Sandbox Code Playgroud)
您还可以使用以下命令将初始对象(即空哈希)传递到循环中each_with_object:
hash = (1..18).each_with_object({}) { |i, h| h[i] = 'free' }
Run Code Online (Sandbox Code Playgroud)
在该块内,第二个参数h引用传入的哈希,因此可以对其进行修改。最后,each_with_object返回填充的哈希。
另一种选择是使用map:
hash = (1..18).map { |i| [i, 'free'] }.to_h
Run Code Online (Sandbox Code Playgroud)
这将构建一个中间数组[[1, 'free'], [2, 'free'], ...],然后使用将其转换为哈希Array#to_h。