From: Rob Biedenharn Date: 2009-03-19T01:31:22+09:00 Subject: Re: Complex sort of matrix possible, e.g. like Excel? On Mar 18, 2009, at 1:58 AM, Christopher Dicely wrote: > Enumerable#sort lets you do this fairly easily with just a pure array > of arrays, e.g., to sort the array-of-arrays "arr" by the first column > ascending and the second descending: > > arr.sort {|a,b| [a[0]<=>b[0], b[1]<=>a[1]].find {|x| x!=0} || 0} Not to detract to much from the other responses, but this ought to be: arr.sort {|a,b| (a[0] <=> b[0]).nonzero? || b[1] <=> a[1] } Take a look at what Numeric#nonzero? does. The docs specifically mention its use when chaining comparisons this way. Doing arr.sort_by {|a| [a[0], -a[1]] } only works if the second element responds to @- (like any Numeric would, but certainly not String). -Rob > On 3/17/09, RichardOnRails > wrote: >> Hi, >> >> I've got an array of rows (and thus a matrix) created user FasterCSV >> to extract data from a CSV file. I'd like to sort the matrix on >> column A ascending and, within that, column B descending. I looked >> at >> Matrix, but it doesn't seem to address that functionality. Is there >> a package that does, or do I have to write my own SuperMatrix >> inherited from Matrix? >> >> Thanks in Advance, >> Richard Rob Biedenharn http://agileconsultingllc.com Rob@AgileConsultingLLC.com