mas*_*llz 3 ruby arrays ruby-on-rails ruby-on-rails-4
我有以下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]
Run Code Online (Sandbox Code Playgroud)
这些字段将始终只是名称,团队和数字,但值的数量(即玩家数量)每次都会有所不同.
我想为每个字段类型创建新数组,以便我得到以下内容:
names = ["Patrick Ewing", "Rik Smits", "Bill Russell"]
teams = ["New York Knicks", "Indiana Pacers", "Boston Celtics"]
numbers = [33,45,6]
Run Code Online (Sandbox Code Playgroud)
这样做的好方法是什么?我尝试了以下内容,但想知道是否有其他解决方案可以更好地使用更大的阵列(最多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"}))
Run Code Online (Sandbox Code Playgroud)
这是另一种/简洁的方式:
> 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]
Run Code Online (Sandbox Code Playgroud)
Ruby的Array#转换之美发挥作用,特别适合您的问题.
| 归档时间: |
|
| 查看次数: |
492 次 |
| 最近记录: |