基本上,我想创建哈希{1959: 0, 1960: 0, 1961: 0, 1962: 0}
等等而不用手动写出来。
我想我从[*1959..2014]
开始,但不知道从哪里去。
答案 0 :(得分:1)
您可以使用Hash::[]
:
Hash[(1959..1962).map { |x| [x, 0] }]
# => {1959=>0, 1960=>0, 1961=>0, 1962=>0}
Ruby 2.1 +中的
(1959..1962).map { |x| [x, 0] }.to_h
# => {1959=>0, 1960=>0, 1961=>0, 1962=>0}
(改变了产出简洁的结束年份)
答案 1 :(得分:1)
您可以在数组中使用inject
来形成哈希,如下所示:
(1959..2014).inject({}) { |hash, year| hash[year] = 0; hash }
inject
就像在每个成员中运行可枚举的每个成员一样,但它将2个参数传递给块,当前对象和可用于收集结果的对象,在本例中为散列。
或者,正如@sawa在下面的评论中指出的那样:
(1959..2014).each_with_object({}) { |year, hash| hash[year] = 0 }
each_with_object
并不要求您像inject
一样在块的末尾返回对象。
[edit]刚刚使用普通范围,而不是数组。添加了each_with_object
选项。
答案 2 :(得分:1)
一种方式:
Hash[[*1959..2014].product([0])]