→ 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