ekh*_*oll 1 ruby arrays sorting
我正在用红宝石创建一个简单的游戏,我有两个存储高分的数组:$HS_Points
和$HS_Names
.我在两个文件中保存高分,我想稍微编码点(点转换为.to_s(23)
).我想按降序对名称和分数进行排序,并将它们限制为10.因此,我需要:
简单points_array.sort
不会这样做,因为它只是对点进行排序,将名称按顺序排列.
任何想法如何解决这个问题?我希望尽可能简单地回答.
joe*_*son 10
像这样的东西?
names = ['Alice', 'Bob', 'Carol']
points = [22, 11, 33]
Run Code Online (Sandbox Code Playgroud)
您可能需要Array#zip方法:
pairs = names.zip(points)
#=> [["Alice", 22], ["Bob", 11], ["Carol", 33]]
Run Code Online (Sandbox Code Playgroud)
要按数组字段排序,请比较该对的两个字段.
按名称分类:
pairs.sort{|x,y| x[0] <=> y[0] }
#=> [["Alice", 22], ["Bob", 11], ["Carol", 33]]
Run Code Online (Sandbox Code Playgroud)
按分数排序:
pairs.sort{|x,y| x[1] <=> y[1] }
#=> [["Bob", 11], ["Alice", 22], ["Carol", 33]]
Run Code Online (Sandbox Code Playgroud)
排序的另一种方法是#sort_by方法而不是比较块(感谢Niklas B.)
按名称分类:
pairs.sort_by(&:first)
#=> [["Alice", 22], ["Bob", 11], ["Carol", 33]]
Run Code Online (Sandbox Code Playgroud)
按分数排序:
pairs.sort_by(&:last)
#=> [["Bob", 11], ["Alice", 22], ["Carol", 33]]
Run Code Online (Sandbox Code Playgroud)
要仅选择高分以上的球员:
pairs.select{|x| x[1] >20 }
#=> [["Alice", 22], ["Carol", 33]]
Run Code Online (Sandbox Code Playgroud)
解压缩:
pairs.map(&:first)
#=> ["Alice", "Bob", "Carol"]
pairs.map(&:last)
#=> [22, 11, 33]
Run Code Online (Sandbox Code Playgroud)
这些想法可能会指向正确的方向.
归档时间: |
|
查看次数: |
1600 次 |
最近记录: |