From: Robert Klemme Date: 2011-07-01T20:18:50+09:00 Subject: Re: How to order Structs based on two fields On Fri, Jul 1, 2011 at 12:55 PM, Iñaki Baz Castillo wrote: > 2011/7/1 Iñaki Baz Castillo : >> I expected that the following could work: >> >>  array.sort_by{|entry| entry.a or entry.b} >> >> but it generates: >> >>   [kk1, kk2, kk3, kk4] >> >> so obviously it does not work. I'm not very used to Enumerable.sort_by >> method, any tip please? > > Maybe it would be better to use "class KK" rather than an struct, and > then define <=> method for KK class (and include Enumerable module)? You can do array.sort_by {|e| [e.a, e.b]} But you can of course define <=> for a Struct class as well KK = Struct.new :a,:b do include Comparable def <=>(o) cmp = a <=> o.a cmp == 0 ? b <=> o.b : cmp end end Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/