1.
Предполагая, что ранг числовая:
array.sort {| a, b | a[:rank] <=> b[:rank] }
Это просто указав, что мы сравниваем а и Ь с помощью [: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, это обеспечит другие операторы сравнения слишком.