我有以下2个数组:
fields = ["name", "team", "number", "name", "team", "number", "name", "team", "number"]
values = ["Patrick Ewing", "New York Knicks", 33, "Rik Smits", "Indiana Pacers", 45, "Bill Russell", "Boston Celtics", 6]
这些字段将始终仅是名称,团队和人数,但是值的数量(即,玩家数量)每次都会有所不同。
我想为每种字段类型创建新的数组,这样我将得到以下信息:
names = ["Patrick Ewing", "Rik Smits", "Bill Russell"]
teams = ["New York Knicks", "Indiana Pacers", "Boston Celtics"]
numbers = [33,45,6]
有什么好方法吗?我已经尝试了以下方法,但是想知道是否还有其他解决方案在较大的阵列(最多300个)中会更好地执行。还是差异可以忽略不计?
names = values.values_at(*(fields.each_index.select{ |i| fields[i] == "name"}))
teams = values.values_at(*(fields.each_index.select{ |i| fields[i] == "team"}))
numbers = values.values_at(*(fields.each_index.select{ |i| fields[i] == "number"}))
这是另一种/简洁的方法:
> name, team, number = values.each_slice(3).to_a.transpose
=> name
> ["Patrick Ewing", "Rik Smits", "Bill Russell"]
=> team
> ["New York Knicks", "Indiana Pacers", "Boston Celtics"]
=> number
> [33, 45, 6]
Ruby的Array#transpose的美丽开始发挥作用,特别是针对您的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句