Enumerable#zip を使う

zipメソッドって何に使うんですか。 - まさにっき(使えないプログラマーの記録)


んー。例えば、以下の代わりとか。

  • injectの例
a = [1,2,3,4,5]
a.inject({}){|h,k| h.merge(k => k*2)}
#=> {5=>10, 1=>2, 2=>4, 3=>6, 4=>8}
  • zip使う
a = [1,2,3,4,5]
Hash[*(a.zip(a.map{|e| e*2}).flatten)]
#=> {5=>10, 1=>2, 2=>4, 3=>6, 4=>8}


この使い方を覚えた先では、次のような使い方だった。

csv_rows = [[:name, :age, :sex], ["bob", "12", "male"], ["rinda", "13", "female"]]
key = nil

csv_rows.each do |row|
  if key.nil?
    key = row
  else
    Hash[*(key.zip(row).flatten)] 
  end
end