在哈希中使用变量符号的正确方法是什么?

时间:2014-12-15 14:09:18

标签: ruby variables hash key symbols

我有两个数组:

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"  }]

我想制作idnameemail符号而不是字符串, 所以我想出了以下内容:

我替换了

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"  }]

这很好用,但似乎可以做得更好/更清洁, 但我无法找到更好的解决方案。

我想知道这个问题是否有更好的解决方案。

2 个答案:

答案 0 :(得分:0)

Ruby的String类有一个to_sym方法:

  

返回与str对应的Symbol,如果之前不存在则创建该符号。

答案 1 :(得分:0)

你可以这样做:

people_values.map { |person| people_keys.map(&:to_sym).zip(person).to_h }