![](/img/trans.png)
[英]Sorting with data from another table using sort_by ruby on rails
[英]using sort_by in ruby (for rails)?
所以我构建了一个自定义的用户数组,如:
[["user1",432],["user1",53],["user9",58],["user5",75],["user3",62]]
我想按每个数组中的2n'd值对它们进行排序,从最大到最小。 我有一种感觉使用sort或sort_by for arrays就是这样做的方法,但我不确定如何完成它
如果您对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] }
另一个替代方案是使用&符号和Array#last
#last 。
array.sort_by(&:last).reverse
使用sort
的解决方案可能是
array.sort { |x, y| y[1] <=> x[1] }
使用它: array.sort_by { |a| -a[1] }
array.sort_by { |a| -a[1] }
还有一个解决方案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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.