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 , он предоставит и другие операторы сравнения.