2017-03-08 4 views
-2

Ich habe ein Array von Strings ganzzahlige Werte ausdrücken:Sortieren Array von Strings, ohne sie in ganzzahligen Umwandlung

array = ["0934", "123", "934", "0123"] 

Ich möchte das Array sortieren, ohne die Saiten in ganze Zahlen umgewandelt werden. Die erwartete Ausgabe lautet:

array = ["0123", "123", "0934", "934"] 

Bitte vorschlagen, wie ich das tun kann.

+0

Betrachtet man "0123" .to_i # => 123' und '" 123 ".to_i # => 123', warum hat Ihre" erwartete Ausgabe "' "0123" "vor" "123"? –

+1

Was ist die Logik hinter Ihrer Sortierung? – sawa

+1

Sie Frage ist ein bisschen unklar. Ich denke, Sie könnten Folgendes sagen: "Ich möchte das Array von Strings (an Ort und Stelle) so sortieren, dass, wenn die Elemente des resultierenden Arrays in Ganzzahlen konvertiert würden, sie in [numerischer Reihenfolge] stehen würden (https: //www.reference .com/math/meaning-numeric-order-7099285d76ee357b), aber ich möchte die Strings nicht in Ganzzahlen in der Sortieroperation konvertieren ". –

Antwort

4

Wenn Sie nicht einen String in eine ganze Zahl innerhalb Array#sort_by! ‚s Block umwandeln kann, könnten Sie Pad die Saiten auf die mit Nullen links (mit String#rjust), so sind sie alle die gleiche Länge, dann sortieren Sie diese gepolsterten Saiten.

n = array.map(&:size).max 
    #=> 4 
array.sort_by! { |s| s.rjust(n, '0') } 
    #=> ["123", "0123", "0934", "934"] 

Hinweis

array.map { |s| s.rjust(n, '0') } 
    #=> ["0934", "0123", "0934", "0123"] 
+0

Danke für die Antwort, das ist was ich will. –

1

ich denke, das den Trick tun wird

array.sort_by!(&:to_i) 
+3

Aber ich möchte es nicht in Ganzzahl umwandeln. –

+0

Sie müssen es in Ganzzahl konvertieren, um die Werte zu vergleichen und – Pramod

+0

@ Pramod zu sortieren Das ist, was Voraussetzung ist. Ich kann nicht. –

1

Es ist so einfach wie das ist:

array.sort 
# => ["0123", "0934", "123", "934"] 

By the way, ist Ihre erwartete Antwort falsch.

bearbeiten

Okay, ich glaube, ich Ihre Absicht, endlich. Das heißt, Sie wollten, dass das Array nach den Werten sortiert wird, die durch das Lesen der Elemente als Floats und dann in absteigender Reihenfolge ihrer Länge erhalten wurden.

array.sort_by{|e| [e.to_f, -e.length]} 
# => ["0123", "123", "0934", "934"] 

Komm schon, du musst so in der Frage von Anfang an schreiben. Erwarten Sie nicht, dass viele Menschen zu solchen nicht-trivialen Anforderungen gelangen können, indem sie zwischen den Zeilen lesen.

+0

Bitte überprüfen Sie die Frage erneut, da die erwartete Ausgabe ["0123", "123", "0934", "934"] ist. –

+0

Ich denke, das OP möchte, dass die sortierten Strings 's' in' s.to_i' sind Reihenfolge, aber nicht die Zeichenfolgen in Ganzzahlen in der Sortieroperation konvertieren möchten. –

+0

@CarySwoveland Das widerspricht der Behauptung, dass das OP nicht in Ganzzahlen konvertieren will. – sawa

Verwandte Themen