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