首页 > 解决方案 > 循环遍历数组并将具有新键的数据添加到单独数组中的散列中

问题描述

我目前正在开发一个从 mlb.com 抓取数据并将数据保存在数组中的应用程序。然后我想遍历数据数组并将每个元素添加到哈希中。这是我正在尝试做的一个香草示例...

players = []

names = ["Kyle Freeland", "Jon Gray", "DJ Johnson"]

names.each do |name|
  players << {:name => name}
end

players 
=> [{:name=>"Kyle Freeland"}, {:name=>"Jon Gray"}, {:name=>"DJ 
Johnson"}]

到目前为止,这正是我想要的,但我也有一个单独的数组存储每个玩家的号码,我试图用“数字”键将其推入每个散列......

numbers = ["21", "55", "63"]

我一直在尝试通过...

numbers.each do |number|
  players.each do |player|
    player[:number] = number
  end
end

这最终给了我...

players
[{:name=>"Kyle Freeland", :number=>"63"}, {:name=>"Jon Gray", 
:number=>"63"}, {:name=>"DJ Johnson", :number=>"63"}]

所以最终的数字被推入每个散列。有没有人能想到的更简单的方法将正确的数字推到他们需要的地方?我正在抓取的所有数据都是有序的。

标签: rubyhashiteration

解决方案


names = ["Kyle Freeland", "Jon Gray", "DJ Johnson"]
numbers = ["21", "55", "63"]

players = names.zip(numbers).map { |x| { name: x[0], number: x[1] } }
#=> [{:name=>"Kyle Freeland", :number=>"21"}, {:name=>"Jon Gray", :number=>"55"}, {:name=>"DJ Johnson", :number=>"63"}]

names.zip(numbers)基本上将 的元素与来自每个参数的相应元素合并,self导致[["Kyle Freeland", "21"], ["Jon Gray", "55"], ["DJ Johnson", "63"]].

然后我们在这个数组上迭代并制作相关的哈希值。


推荐阅读