我有一个名为leaders的结构数组。结构体的类如下,以提供上下文信息:
class Leader < Struct.new(:rank, :user); end
两个问题:
- 如何按排名对结构数组进行排序?
- 如何按排名和用户创建时间对结构数组进行排序?
我有一个名为leaders的结构数组。结构体的类如下,以提供上下文信息:
class Leader < Struct.new(:rank, :user); end
两个问题:
假设“rank”是一个数字:
array.sort {| a, b | a[:rank] <=> b[:rank] }
这仅仅是指定我们使用[:rank]
来比较a和b。
2.
array.sort {| a, b | a[:rank] == b[:rank] ?
a[:user].created_at <=> b[:user].created_at :
a[:rank] <=> b[:rank] }
这使用了三元运算符。如果等级相等,我们就按照 [:user].created_at 进行比较。否则,我们就按照等级进行比较。
你可以在自己的类中实现 <=> 以允许本地排序:
class Leader < Struct.new(:rank, :user)
def <=>(other)
self[:rank] <=> other[:rank]
end
end
然后您可以执行以下操作:
leaders.sort()
这里使用了 sort_by 来实现。正如文档中所述,根据检索 rank
和 created_at
值的成本而言,它可能比使用 sort 更低效。
按排名排序:
leaders.sort_by {|l| l.rank}
按等级和创建时间排序:
leaders.sort_by {|l| [l.rank, l.user.created_at]}