我有一个称为领导者的结构数组。该结构类看起来是这样的,对上下文信息:对结构数组排序
class Leader < Struct.new(:rank, :user); end
两个问题:
- 我如何结构的按等级排序的数组?
- 如何按rank和user.created_at对结构数组进行排序?
我有一个称为领导者的结构数组。该结构类看起来是这样的,对上下文信息:对结构数组排序
class Leader < Struct.new(:rank, :user); end
两个问题:
1.
假设排名是数字:
array.sort {| a, b | a[:rank] <=> b[:rank] }
这只是指明我们比较a和b使用[:rank]
。
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()
如果包含Comparable,它会提供其他比较运算符太。
这是一个使用sort_by的实现。正如文档中指出的那样,它可能不如使用排序的版本有效,这取决于检索rank
和created_at
值的成本有多高。
排序按等级:
leaders.sort_by {|l| l.rank}
按职级和created_at排序:
leaders.sort_by {|l| [l.rank, l.user.created_at]}