将第一行作为下一行哈希的键?

Baj*_*kie 2 ruby excel hash parsing

我很难弄清楚如何使用第一行中的键使下一行成为哈希.

我有一个像这样结构的数组:

[["id", "name", "address"], [1, "James", "...."], [2, "John", "...."] ]
Run Code Online (Sandbox Code Playgroud)

成为:

[{ id : 1, name: "James", address: "..."}, ...]
Run Code Online (Sandbox Code Playgroud)

我使用了一个gem"simple_xlsx_reader",我只提取出第一张.

wb.sheets.first.row
Run Code Online (Sandbox Code Playgroud)

从上面得到一个类似的数组输出.

谢谢!

Car*_*and 9

arr = [["id", "name"], [1, "Jack"], [2, "Jill"]]

[arr.first].product(arr.drop 1).map { |a| a.transpose.to_h }
  #=> [{"id"=>1, "name"=>"Jack"}, {"id"=>2, "name"=>"Jill"}]
Run Code Online (Sandbox Code Playgroud)

步骤:

b = [arr.first]
  #=> [["id", "name"]] 
c = arr.drop 1
  #=> [[1, "Jack"], [2, "Jill"]] 
d = b.product(c)
  #=> [[["id", "name"], [1, "Jack"]], [["id", "name"], [2, "Jill"]]] 
d.map { |a| a.transpose.to_h }
  #=> [{"id"=>1, "name"=>"Jack"}, {"id"=>2, "name"=>"Jill"}] 
Run Code Online (Sandbox Code Playgroud)

d传递给map块的第一个元素是:

a = d.first
  [["id", "name"], [1, "Jack"]]
Run Code Online (Sandbox Code Playgroud)

因此块计算是:

e = a.transpose
  #=> [["id", 1], ["name", "Jack"]] 
e.to_h
  #=> {"id"=>1, "name"=>"Jack"} 
Run Code Online (Sandbox Code Playgroud)