2016-07-05 7 views
-1

Beispiel Daten:Sortier Array von gemischten Ganzzahl- und Zeichenfolgenwerte

["A-1.jpg", "A-2.jpg", "A-10.jpg", "A-101.jpg", "B-1.jpg", "B-2.jpg"]

I Diese müssen sortiert, so daß alle A ist an erster Stelle und der numerische Wert in aufsteigender Reihenfolge, z.B. 'a-2' ist vor 'a-10', die beide vor 'b-1' sind

Danke.

+3

Wir möchten Beweise für Ihre Bemühungen um zu sehen, diese zu lösen. Hast du Code geschrieben? Wenn nicht, warum? Hast du nach einer Lösung gesucht? Wo hast du gesucht und warum hat das nicht geholfen? Bitte lesen Sie "[fragen]" einschließlich der verlinkten Seiten. Wie es aussieht, hast du nicht versucht, dass wir es für dich schreiben. –

Antwort

3
arr = ["A-1.jpg", "A-10.jpg", "A-2.jpg", "A-101.jpg", "B-1.jpg", "B-2.jpg"] 
arr.sort_by { |s| first, last = s.split("-"); [first, last.to_i] } 

=> ["A-1.jpg", "A-2.jpg", "A-10.jpg", "A-101.jpg", "B-1.jpg", "B-2.jpg"] 
0
["A-1.jpg", "A-2.jpg", "A-10.jpg", "A-101.jpg", "B-1.jpg", "B-2.jpg"].sort_by{|s| s =~ /^(\w)-(\d+)\.jpg$/ && $1.ord * 1000 + $2.to_i}