它更有意义使用数组users
(而不是变量user1
,user2
等),因此代码将与任意数量的用户一起使用。用户i
的值为user[i]
(从用户0
开始计数)。
keys, *values = array.map(&:flatten)
users = [keys.map(&:to_sym)].product(values).map { |pair| pair.transpose.to_h }
#=> [{:number=>"91", :name=>"dave", :postion=>"center", :points=>"42"},
# {:number=>"82", :name=>"sanjay", :postion=>"behind", :points=>"14"},
# {:number=>"133", :name=>"ayman", :postion=>"front", :points=>"23"}]
步骤如下。
keys, *values = array.map(&:flatten)
#=> [["number", "name", "postion", "points"],
# ["91", "dave", "center", "42"],
# ["82", "sanjay", "behind", "14"],
# ["133", "ayman", "front", "23"]]
keys
#=> ["number", "name", "postion", "points"]
values
#=> [["91", "dave", "center", "42"],
# ["82", "sanjay", "behind", "14"],
# ["133", "ayman", "front", "23"]]
a = keys.map(&:to_sym)
#=> [:number, :name, :postion, :points]
b = [a]
#=> [[:number, :name, :postion, :points]]
c = b.product(values)
#=> [[[:number, :name, :postion, :points], ["91", "dave", "center", "42"]],
[[:number, :name, :postion, :points], ["82", "sanjay", "behind", "14"]],
[[:number, :name, :postion, :points], ["133", "ayman", "front", "23"]]]
c.map { |pair| pair.transpose.to_h }
# <return value above>
当执行的最后一个步骤的c
每个元素被传递到块,块变量pair
被分配给值并且执行块的计算。当c
的第一个元素被传递给块时,将执行以下步骤。
pair = c.first
#=> [[:number, :name, :postion, :points], ["91", "dave", "center", "42"]]
d = pair.transpose
#=> [[:number, "91"], [:name, "dave"], [:postion, "center"], [:points, "42"]]
d.to_h
#=> {:number=>"91", :name=>"dave", :postion=>"center", :points=>"42"}
其余的计算是类似的。
他们总是只是号码,名称,中心和点? –
他们是 - 号码,名字,位置,点数。 – Dave
该数组来自哪里? – Stefan