我有一个像这样的多维数组:
myArray = [["Alaska","Rain","3"],["Alaska","Snow","4"],["Alabama","Snow","2"],["Alabama","Hail","1"]]
我想以这样的 CSV 输出结束。
State,Snow,Rain,Hail
Alaska,4,3,nil
Alabama,2,nil,1
我知道要按照我想要的方式将它输出到 CSV,我必须有这样的输出数组:
outputArray =[["State","Snow","Rain","Hail"],["Alaska",4,3,nil],["Alabama",2,nil,1]]
但我不知道如何走到这一步。 我试过使用 group_by 但没有成功。
最佳答案
这是一种使用中间散列的方法
h
最终看起来像这样
{"Alaska"=>{"Rain"=>"3", "Snow"=>"4"}, "Alabama"=>{"Snow"=>"2", "Hail"=>"1"}}
myArray = [["Alaska","Rain","3"],["Alaska","Snow","4"],["Alabama","Snow","2"],["Alabama","Hail","1"]]
myFields = ["Snow","Rain","Hail"]
h = Hash.new{|h, k| h[k] = {}}
myArray.each{|i, j, k| h[i][j] = k }
p [["State"] + myFields] + h.map{|k, v| [k] + v.values_at(*myFields)}
输出
[["State", "Snow", "Rain", "Hail"], ["Alaska", "4", "3", nil], ["Alabama", "2", nil, "1"]]
关于arrays - 如何在 Ruby 中将数组转换为另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30976041/