Arrays 将数组的Ruby数组转换为哈希数组

Arrays 将数组的Ruby数组转换为哈希数组,arrays,ruby,hash,Arrays,Ruby,Hash,我有一个数组: data = [ ["Smith", "Bob", "Male"], ["Jim", "Tim", "Male"], ["Welch", "Anne", "Female"] ] 我将如何将其转换为: data = [ {:first_name => "Smith", :last_name => "Bob", :gender => "Male"}, {:first_name => "Jim", :last_name => "Ti

我有一个数组:

data = [
 ["Smith", "Bob", "Male"], 
 ["Jim", "Tim", "Male"],   
 ["Welch", "Anne", "Female"]
]
我将如何将其转换为:

data = [
 {:first_name => "Smith", :last_name => "Bob", :gender => "Male"},  
 {:first_name => "Jim", :last_name => "Tim", :gender => "Male"}, 
 {:first_name => "Welch", :last_name => "Anne", :gender => "Female"}
]

您可以这样做:

fields = [:first_name, :last_name, :gender]
data.map {|row| fields.zip(row).to_h }

#=> [{:first_name=>"Smith", :last_name=>"Bob", :gender=>"Male"}, {:first_name=>"Jim", :last_name=>"Tim", :gender=>"Male"}, {:first_name=>"Welch", :last_name=>"Anne", :gender=>"Female"}] 

请记住,只有当元素的顺序与字段的顺序相同时,此操作才有效。

您可以执行以下操作:

fields = [:first_name, :last_name, :gender]
data.map {|row| fields.zip(row).to_h }

#=> [{:first_name=>"Smith", :last_name=>"Bob", :gender=>"Male"}, {:first_name=>"Jim", :last_name=>"Tim", :gender=>"Male"}, {:first_name=>"Welch", :last_name=>"Anne", :gender=>"Female"}] 

请记住,只有当元素的顺序与字段的顺序相同时,这才有效。

您也可以使用
Struct

presenter = Struct.new(:first_name, :last_name, :gender)
data.map { |e| presenter.new(*e).to_h }
#=> [{:first_name=>"Smith", :last_name=>"Bob", :gender=>"Male"}, 
#    {:first_name=>"Jim", :last_name=>"Tim", :gender=>"Male"}, 
#    {:first_name=>"Welch", :last_name=>"Anne", :gender=>"Female"}]

您还可以使用
Struct

presenter = Struct.new(:first_name, :last_name, :gender)
data.map { |e| presenter.new(*e).to_h }
#=> [{:first_name=>"Smith", :last_name=>"Bob", :gender=>"Male"}, 
#    {:first_name=>"Jim", :last_name=>"Tim", :gender=>"Male"}, 
#    {:first_name=>"Welch", :last_name=>"Anne", :gender=>"Female"}]

您是如何获得AoA输入的?你能分享你尝试转换的代码吗?
data.map{f,l,g{:first_name=>f,:last_name=>l,:gender=>g}
你是如何获得AoA输入的?你能分享你尝试转换的代码吗?
data.map{f,l,g{:first_name=>f,:last_name=>l,:gender=>g}
虽然这可以回答问题,但它没有提供任何上下文来解释如何转换或为什么转换。考虑一两句话来解释你的答案。这可能有助于提出这个问题的人,也有助于未来几代遇到这个答案的程序员。:-)虽然这可能回答了这个问题,但它没有提供任何上下文来解释如何或为什么。考虑一两句话来解释你的答案。这可能有助于提出这个问题的人,也有助于未来几代遇到这个答案的程序员。:-)