2016-09-05 1 views
2

Ich versuche, eine Liste von Einheiten nach Länge und dann alphabetisch zu sortieren. Wenn ich alphabetisch sortieren, ich eine Liste der Form erhaltenPaginierte Liste nach Länge und dann alphabetisch in RoR App sortieren

Troop 1  
Troop 11  
Troop 111 
Troop 1111 
Troop 5  
Troop 55  
Troop 555 
Troop 7  
Troop 77  
Troop 777 

Stattdessen würde Ich mag

Troop 1 
Troop 5 
Troop 7  
Troop 11  
Troop 55  
Troop 77  
Troop 111 
Troop 555 
Troop 777 
Troop 1111 

Ich dachte, dass eine einfache Art auf Namenslänge basiert tun und dann alphabetisch den Trick tun würde, nennen , aber ich kann keine Längen sortieren, um zu arbeiten. Ich habe ein paar Variationen des Formulars

vergeblich versucht. Es kommt mir nun in den Sinn, dass ich nach Platz spalten und nach dem zweiten Wert sortieren muss (d. H. Nach der Zahl, die ich gepackt habe), aber ich weiß auch nicht, wie ich das machen soll. Jede Hilfe würde sehr geschätzt werden!

Antwort

2

Das wird in der Programmierung normalerweise "Natural Sorting" genannt.

Glücklicherweise müssen Sie es in Ruby nicht tun. SQL ist in der Lage genug:

@units = Unit.paginate(page: params[:page]).order("LENGTH(name) ASC, name ASC") 
+0

Arbeitete wie ein Charme. Danke für die Hilfe! – mjswartz

+0

Eigentlich habe ich etwas interessantes gefunden, dem du vielleicht helfen kannst. Wenn ich 'Crew 123' zur Liste hinzufüge, wird es zwischen 'Truppe 7' und 'Truppe 11' gesetzt. Wäre es möglich, den Platz zu teilen und alphabetisch nach dem ersten Element im geteilten Array und numerisch nach dem zweiten Element im geteilten Array zu sortieren? – mjswartz

+0

'.sort {| x, y | x = x.split (''); y = y.split (''); x [0] == y [0]? x [1] <=> y [1]: x [0] <=> y [0]} 'wahrscheinlich – Ven

Verwandte Themen