基本上,我想創建散列{1959: 0, 1960: 0, 1961: 0, 1962: 0}
等等,而不用手動寫出來。將數組轉換爲哈希鍵,併爲所有項指定值?
我想我從[*1959..2014]
開始,但不知道從那裏去哪裏。
基本上,我想創建散列{1959: 0, 1960: 0, 1961: 0, 1962: 0}
等等,而不用手動寫出來。將數組轉換爲哈希鍵,併爲所有項指定值?
我想我從[*1959..2014]
開始,但不知道從那裏去哪裏。
您可以使用Hash::[]
:
Hash[(1959..1962).map { |x| [x, 0] }]
# => {1959=>0, 1960=>0, 1961=>0, 1962=>0}
或Enumerable#to_h
在Ruby中2.1+:
(1959..1962).map { |x| [x, 0] }.to_h
# => {1959=>0, 1960=>0, 1961=>0, 1962=>0}
(改結束一年的產出簡潔)
您可以使用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
做最後返回的對象。使用簡單範圍,而不是數組。增加了each_with_object
選項。
方式一:
Hash[[*1959..2014].product([0])]
或者在Ruby 2.1中,'[* 1959..2014] .product([0])。to_h' – 2014-09-28 01:00:41
你不能。這不是一個有效的Ruby對象。 – sawa 2014-09-27 14:35:19