因此,我构建了一个自定义的用户数组,如下所示:
[["user1",432],["user1",53],["user9",58],["user5",75],["user3",62]]
我希望按照每个数组中的2n'd值从大到小对它们进行排序。我觉得对数组使用sort或sort_by是一种方法,但我不太确定如何实现它
发布于 2012-02-05 17:27:39
sort_by
如果您对sort_by
感兴趣,可以调整内部数组的结构
array.sort_by { |_, x| x }.reverse
或者调用索引运算符
array.sort_by { |x| x[1] }.reverse
您可以对从块返回的值求反,而不是反转。
array.sort_by { |_, x| -x }
array.sort_by { |x| -x[1] }
另一种选择是使用ampersand和Array#last
。
array.sort_by(&:last).reverse
排序
使用sort
的解决方案可以是
array.sort { |x, y| y[1] <=> x[1] }
发布于 2012-02-05 17:25:46
使用这个:array.sort_by { |a| -a[1] }
发布于 2012-02-06 01:36:00
与之相反的sort_by
的另一个解决方案(-
并不是在所有情况下都有效,请考虑按字符串排序):
class Invertible
include Comparable
attr_reader :x
def initialize(x)
@x = x
end
def <=> (x)
x.x <=> @x
end
end
class Object
def invertible
Invertible.new(self)
end
end
[1, 2, 3].sort_by(&:invertible) #=> [3, 2, 1]
["a", "b", "c"].sort_by(&:invertible) #=> ["c", "b", "a"]
它在简单的情况下比反向慢,但在复杂的排序中可能工作得更好:
objs.sort_by do |obj|
[obj.name, obj.date.invertible, obj.score, ...]
end
https://stackoverflow.com/questions/9148174
复制相似问题