在ruby中使用sort_by(用于rails)?

Ell*_*iot 19 ruby ruby-on-rails ruby-on-rails-3

所以我构建了一个自定义的用户数组,如:

[["user1",432],["user1",53],["user9",58],["user5",75],["user3",62]]
Run Code Online (Sandbox Code Playgroud)

我想按每个数组中的2n'd值对它们进行排序,从最大到最小.我有一种感觉使用sort或sort_by for arrays就是这样做的方法,但我不确定如何完成它

Jan*_*Jan 43

排序方式

如果您对此感兴趣sort_by,可以对内部数组进行解构

array.sort_by { |_, x| x }.reverse
Run Code Online (Sandbox Code Playgroud)

或者调用索引运算符

array.sort_by { |x| x[1] }.reverse
Run Code Online (Sandbox Code Playgroud)

而不是反转你可以否定从块返回的值.

array.sort_by { |_, x| -x }
array.sort_by { |x| -x[1] }
Run Code Online (Sandbox Code Playgroud)

另一种替代方案是使用一种符号Array#last.

array.sort_by(&:last).reverse
Run Code Online (Sandbox Code Playgroud)

分类

使用的解决方案sort可能是

array.sort { |x, y| y[1] <=> x[1] }
Run Code Online (Sandbox Code Playgroud)

  • 如果你想要完整性,那么你可能想要包括`array.sort_by(&:last).reverse`. (3认同)