From: "Kroeger, Simon (ext)" Date: 2006-01-04T22:37:00+09:00 Subject: Re: Newbie question about nested sort > From: Robert Klemme [mailto:bob.news@gmx.net] > > Grehom wrote: > > what am I doing wrong? I wanted to sort primarily on count (second > > position in array), then sub-sort alphabetically (first position in > > array) > > > > char_freq = [["c", 2],["b", 5],["a", 2]] > > sorted_freq = char_freq.sort {|a, b| b[1]<=>a[1] || a[0]<=>b[0] } > > sorted_freq.each do |d| > > print d[0]*d[1] > > end > > > > [...] > > Generally you need to do conditional evaluation based on higher prio > results. Using "||" or "or" won't help here (dunno what Perl > does here). > > You want something like > [...] hmmm, I don't think he realy *want's* this. Please don't scare our new perl friends away... :) there is a simple solution to that: char_freq = [["c", 2],["b", 5],["a", 2]] sorted_freq = char_freq.sort {|a, b| (b[1]<=>a[1]).nonzero? || a[0]<=>b[0] } sorted_freq.each do |d| print d[0]*d[1] end cheers Simon