2012-02-23 2 views
2

У меня есть следующий класс LineaСортировать список рубина

class Linea 
    include Comparable 
    attr_accessor :maxcap, :capatuale, :citta1, :citta2, :lineac 

    def initialize(c1, c2, maxc) 
     raise CapacitaIllegale if maxc <= 0 
     @maxcap = maxc 
     @capatuale = maxc 
     @citta1 = c1 
     @citta2 = c2 
     @lineac = [] 
     @lineac.push(c1) 
     @lineac << c2 
    end 

    def <=> (l) 
     if(l.is_a?(Linea)) 
     if (l.maxcap>@maxcap) 
      return l.maxcap 
     end 
     if([email protected]) 
      if (l.citta1.pop + l.citta2.pop>@[email protected]) 
      return l.maxcap 
      end 
     end 
     end 
     return -1 
    end 
    end 

после того, как в классе Rete, где я хочу, чтобы вставить Linea и делать вид, используя < => так;

class Rete 
    attr_accessor :lineec, :guasto_seg 

    def initialize() 
     @rete = [] 
     @guasto_seg = [] 
    end 

    def aggiungi_linea(c1, c2, maxc) 
     l = Linea.new(c1, c2, maxc) 
     unless (citta_presente(c1, c2)) 
      @rete << l 
      @rete.sort { |l1,l2| l1<=>l2 if l1.is_a?(Linea) and l2.is_a?(Linea) } 
     else 
      raise LineaGiaEsistente 
     end 
    end 

    + some diferent method 

    end 

Я хотел попросить объяснений того, как она используется для рода, если у меня это право, если < => сделано и называется в этом роде, так правильно. ??????? , пожалуйста, ответьте мне как можно скорее, спасибо.

+1

Вы можете прочитать документацию по этому вопросу : http://ruby-doc.org/core-1.9.3/Array.html#method-i-sort – summea

ответ

2

Чтобы быть полезным для сортировки, метод <=> должен вести себя так:

big_linea <=> small_linea #=> 1 
big_linea <=> equally_big_linea #=> 0 
small_linea <=> big_linea #=> -1 

Когда это работает, вы должны быть в состоянии сделать

@rete.sort #no block needed 
Смежные вопросы