# → Sorting objects in array in Ruby → → →

It's easy to sort a simple array in Ruby, you just do a=[1,3,2]; a.sort. But what if you want to **sort array of objects**? It's also very simple.

All you have to do is define a spaceship operator. What is spaceship operator? It's this: <=>. It returns three values for A and B. -1 if A<B, 0 if A=B and 1 if A>B.

module Geo class Distance KM = 'km' attr_reader :amount def initialize(amount, unit = KM) @amount, @unit = amount, unit end def <=>(other) @amount <=> other.amount end end end distances = [] distances << Geo::Distance.new(1) distances << Geo::Distance.new(4) distances << Geo::Distance.new(2) distances.sort

To prove that it worked we can display sorted values:

>> distances.sort.map {|d| d.amount} => [1, 2, 4]

Created on 15 June 2009