Ok, imagine que você precisa classificar um array de objetos por N critérios.
Aqui está sua matriz:
array = [{a: 2, b: 2}, {a: 2, b: 1}, {a: 1, b: 2}, {a: 1, b: 2}]
Aqui está a lista de critérios:
criteria = [:a, :b]
E aqui está como classificá-lo:
array.sort! do |a,b|
criteria.reverse_each.inject(true) do |m, s|
m && a[s] <=> b[s]
end
end
E o resultado é
[{:a=>1, :b=>1}, {:a=>1, :b=>2}, {:a=>2, :b=>1}, {:a=>2, :b=>2}]
Felicidades!