2016-07-28 16 views
1

Da die folgende Zeichenfolge beteiligt: ​​Ruby-Sortiermethode wirkt seltsam, wenn negative Zahlen

numbers = "4 5 29 54 4 0 -214 542 -64 1 -3 6 -6" 

Ich möchte diese Reihenfolge in numerischer erhalten. Dies ist der Code, den ich

numbers.split(' ').sort 

Jedoch bin mit dieser kehrt die folgenden:

["-214", "-3", "-6", "-64", "0", "1", "29", "4", "4", "5", "54", "542", "6"] 

Warum Art wird auf diese Weise zu verhalten. Idealerweise sollte das Array -214 als erste Ganzzahl und 542 als zweite Ganzzahl haben. Wie kann ich das erreichen?

gewünschte Ausgabe:

[ "-214", "-64", "-6", "-3", "0", "1", "4", "4", „5 "," 6 "," 26 "," 54 "," 542 "]

+2

Das sind keine ganzen Zahlen. –

Antwort

4

Ruby's sort standardmäßig, bei der Arbeit mit Strings, in lexikographischer Reihenfolge, wie es hier getan hat. Wenn Sie durch numerische Reihenfolge sortieren wollen, möchten Sie etwas tun:

numbers.split.sort_by(&:to_i) 
+1

'split 'teilt standardmäßig Whitespace auf, so dass nur' split' und nicht 'split (' ')' benötigt wird. –

0

Dadurch wird der Trick für Sie tun.

numbers.map {| v | v.to_i} .sort {| a, b | a < => b}