Alle venerd14 settembre 2007, Axel Etzold ha scritto:
> Dear all,
>
> I have many arrays like
>
> a=[{'a',10,'b',3},{'a',10,'b',4},{'a',5,'b',13},{'a',13,'b',13},
> {'a',10,'b',7},{'a',5,'b',3}]
>
> which I'd like to sort such that I get the hashes with the highest
> values of 'a' first. If there are ties, I'd like to sort them (but not
> the entire array) such
> that the highest values of 'b' come first.
> So I can't just sort for 'a'-values first and then for 'b'-values,
> as this would destroy the first sort order.
>
> Is there a built-in way of getting the ties in sorting, such as an
> Array of the results of the <=> comparisons ?
>
> Thank you!
>
> Best regards,
>
> Axel

This should work:

  a.sort_by{|i| [i['a'], i['b']]}.reverse

a.sort_by returns the hashes sorted by the values of 'a' and, in case of a 
tie, the values of 'b', both in ascending order. Applying reverse to this 
array gives you the correct order. The result is the following:

[{"a"=>13, "b"=>13}, {"a"=>10, "b"=>7}, {"a"=>10, "b"=>4}, {"a"=>10, "b"=>3}, 
{"a"=>5, "b"=>13}, {"a"=>5, "b"=>3}]

I hope this helps

Stefano