我有一个2d数组,它应该是基于点数的用户排名。我首先启动它:
ranked_user = []
然后我做了一些积分计算并将一些东西推入数组:
ranked_user.push([user.id, user.username, user.location, points])
导致
=> [[8, "Jhonny", "Berlin", 11], [9, "Ben", "Hamburg", 3], [10, "Hugo", "Munich", 6]]
现在我想根据第4个值(点数)对该数组进行排序,以显示排名。 我尝试了两件事:
ranked_user.sort_by{|k|k[3]}
和
ranked_user.sort { |a, b| b[3] <=> a[3] }
我希望如此:
=> [[9, "Ben", "Hamburg", 3], [10, "Hugo", "Munich", 6], [8, "Jhonny", "Berlin", 11]]
但数组根本没有排序。
我做错了什么?
答案 0 :(得分:2)
您需要使用sort_by!
来修改原始数组。
答案 1 :(得分:2)
加入Morgan Laco的回答:
如果你这样做:
ranked_user.sort_by{|k|k[3]}
然后ranked_user
仍然是无序的。只订购退货。
因此,为了更改ranked_user
,您必须执行以下任一操作:
ranked_user = ranked_user.sort_by{|k|k[3]}
ranked_user.sort_by!{|k|k[3]}