我有一個稱爲領導者的結構數組。該結構類看起來是這樣的,對上下文信息:對結構數組排序
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]}