首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ruby中使用sort_by (用于rails)?

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

Stack Overflow用户
提问于 2012-02-05 17:22:00
回答 3查看 31.3K关注 0票数 20

因此,我构建了一个自定义的用户数组,如下所示:

代码语言:javascript
复制
[["user1",432],["user1",53],["user9",58],["user5",75],["user3",62]]

我希望按照每个数组中的2n'd值从大到小对它们进行排序。我觉得对数组使用sort或sort_by是一种方法,但我不太确定如何实现它

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-05 17:27:39

sort_by

如果您对sort_by感兴趣,可以调整内部数组的结构

代码语言:javascript
复制
array.sort_by { |_, x| x }.reverse

或者调用索引运算符

代码语言:javascript
复制
array.sort_by { |x| x[1] }.reverse

您可以对从块返回的值求反,而不是反转。

代码语言:javascript
复制
array.sort_by { |_, x| -x }
array.sort_by { |x| -x[1] }

另一种选择是使用ampersandArray#last

代码语言:javascript
复制
array.sort_by(&:last).reverse

排序

使用sort的解决方案可以是

代码语言:javascript
复制
array.sort { |x, y| y[1] <=> x[1] }
票数 44
EN

Stack Overflow用户

发布于 2012-02-05 17:25:46

使用这个:array.sort_by { |a| -a[1] }

票数 2
EN

Stack Overflow用户

发布于 2012-02-06 01:36:00

与之相反的sort_by的另一个解决方案(-并不是在所有情况下都有效,请考虑按字符串排序):

代码语言:javascript
复制
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"]

它在简单的情况下比反向慢,但在复杂的排序中可能工作得更好:

代码语言:javascript
复制
objs.sort_by do |obj|  
  [obj.name, obj.date.invertible, obj.score, ...]
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9148174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档