2015-12-26 6 views
6

Ich muss eine Tabelle von Objekten des Typs Range um ihren Startpunkt sortieren. Dafür habe ich den folgenden Code, der gut arbeitet:Was ist die eleganteste Art, Bereiche in Ruby zu sortieren

ranges = @ranges.sort do |a,b| 
    (a.min) <=> (b.min) 
end 

Ich habe mich nur gefragt, ob es eine kürzere und elegante Art und Weise, die gleiche Sache zu tun war.

+2

Ich glaube nicht, diese Frage wirklich ist On-Topic, da Sie nur bitten, dass jemand den *** working code *** umformt. – Charles

Antwort

8

Wie wäre:

ranges = @ranges.sort_by(&:min) 

Oder wenn Sie tatsächlich den Ausgangspunkt, anstatt das Minimum bedeuten, da Bereiche wie (5..3) existieren kann:

ranges = @ranges.sort_by(&:first) 
+0

perfekt, danke! –

+1

Ich würde die erste wegen eines Randfalles vermeiden: 'a = [4..6, 5..3]; a.sort_by (&: first) # => [4..6, 5..3]; a.sort_by (&: min) # => ArgumentError: Vergleich von Fixnum mit nil failed'. –

Verwandte Themen