ruby中將陣列轉換成hash

c3tc3tc3t發表於2015-12-19

class Array
def to_h(default=nil)
Hash[ *inject([]) { |a, value| a.push value, default || yield(value) } ]
end
end

 

看懂這個方法先理解這個

p Hash[*[1,2,3,4]]
列印出
{1=>2, 3=>4}

擴充套件了一個to_h方法。這個*就是將陣列呼叫inject方法返回的陣列平鋪,我是這麼理解的,
當default為nil,也就是不傳遞引數給to_h時,把value傳遞給方法塊運算,value和塊運算結果都加入到陣列a中,


事例

a.to_h(true)
# => {1=>true, 2=>true, 3=>true}
a.to_h { |value| [value * -1, value * 2] }
# => {1=>[-1, 2], 2=>[-2, 4], 3=>[-3, 6]}

相關文章