我有两个数组:
people_keys = ['id', 'name', 'email']
people_values = [[1, 'Tarzan', 'tarzan@jungle.com'],
[2, 'Jane', 'jane@jungle.com' ]]
我希望制作一系列人物:
people = []
people_values.each do |person_values|
person = {}
person_values.each_with_index do |person_value, index|
person[people_keys[index]] = person_value
end
people.push( person )
end
这给了我以下结果:
people # => [{"id"=>1, "name"=>"Tarzan", "email"=>"tarzan@jungle.com"},
# {"id"=>2, "name"=>"Jane", "email"=>"jane@jungle.com" }]
我想制作id
,name
和email
符号而不是字符串,
所以我想出了以下内容:
我替换了
person[people_keys[index]] = person_value
与
person[:"#{people_keys[index]}"] = person_value
这给了我以下结果:
people # => [{:id=>1, :name=>"Tarzan", :email=>"tarzan@jungle.com"},
# {:id=>2, :name=>"Jane", :email=>"jane@jungle.com" }]
这很好用,但似乎可以做得更好/更清洁, 但我无法找到更好的解决方案。
我想知道这个问题是否有更好的解决方案。
答案 0 :(得分:0)
Ruby的String类有一个to_sym
方法:
返回与str对应的Symbol,如果之前不存在则创建该符号。
答案 1 :(得分:0)
你可以这样做:
people_values.map { |person| people_keys.map(&:to_sym).zip(person).to_h }