ker*_*lin 2 arrays sorting struct ruby-on-rails
我有一系列称为领导者的结构.对于上下文信息,struct类看起来像这样:
class Leader < Struct.new(:rank, :user); end
Run Code Online (Sandbox Code Playgroud)
两个问题:
1.
假设排名是数字:
array.sort {| a, b | a[:rank] <=> b[:rank] }
Run Code Online (Sandbox Code Playgroud)
这只是指定我们比较a和b使用[:rank].
2.
array.sort {| a, b | a[:rank] == b[:rank] ?
a[:user].created_at <=> b[:user].created_at :
a[:rank] <=> b[:rank] }
Run Code Online (Sandbox Code Playgroud)
这使用三元组.如果排名相等,我们按[:user] .created_at进行比较.否则,我们按行列进行比较.
您可以在自己的类中实现<=>以允许本机排序:
class Leader < Struct.new(:rank, :user)
def <=>(other)
self[:rank] <=> other[:rank]
end
end
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
leaders.sort()
Run Code Online (Sandbox Code Playgroud)
如果包含Comparable,它也将提供其他比较运算符.
| 归档时间: |
|
| 查看次数: |
2251 次 |
| 最近记录: |