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



我有两个数组:

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

这工作得很好,但似乎可以做得更好/更干净,但我找不到更好的解决方案。

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

Ruby的String类有一个to_sym方法:

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

你可以做这样的事情:

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

相关内容

最新更新