Es ist mir aufgefallen, dass viele numerische Sortiermethoden nach 1, 10, 2, 3 zu sortieren scheinen ... anstatt nach den erwarteten 1, 2, 3, 10 ... Ich habe Probleme, ein Szenario zu finden, in dem ich es tun würde Ich brauche die erste Methode und als Benutzer bin ich immer frustriert, wenn ich sie in der Praxis sehe. Gibt es legitime Anwendungsfälle für den ersten Stil gegenüber dem zweiten? Wenn ja, was sind sie? Wenn nicht, wie ist der erste Sortierstil überhaupt entstanden? Was sind die offiziellen Namen für jede Sortiermethode?
30
Antworten:
das ist lexikografische Sortierung, was bedeutet, dass die Sprache die Variablen als Zeichenfolgen behandelt und Zeichen für Zeichen vergleicht (
"200"
ist größer als"19999"
weil'2'
ist größer als'1'
)Um dies zu beheben, können Sie
stellen Sie sicher, dass die Werte als ganze Zahlen behandelt werden,
Voranstellen
'0'
der Zeichenfolgen, damit alle die gleiche Länge haben (nur möglich, wenn Sie den Maximalwert kennen).Aus diesem Grund werden in Mediendateien (S1E01) mit einer vorangestellten 0 Episodennummern angezeigt, damit bei einer lexikografischen Sortierung nichts durcheinander kommt und Programme einfach in alphabetischer Reihenfolge abgespielt / angezeigt werden können.
oder erstellen Sie einen benutzerdefinierten Komparator, der zuerst die Länge der Zeichenfolgen vergleicht (kürzere Zeichenfolgen sind kleinere Ganzzahlen) und wenn sie gleich sind, die lexikografische (vorsichtige Führung
'0'
)quelle
Alphabetisch kommt 1 vor 2. Wenn Sie die erste Methode sehen, liegt dies nicht daran, dass sie wünschenswert ist, sondern daran, dass die Sortierung streng alphabetisch ist (und von links nach rechts, jeweils ein Zeichen): 1, 2, 10 ist sinnvoll für Sie, aber nicht für einen Computer, der nur alphabetische Vergleiche kennt. In solch einem einfachen Vergleich ist es unmöglich zu wissen, dass eine Eins, gefolgt von einer 0, tatsächlich nach einer Zwei kommt.
Wenn Sie eine Sortierung mit gemischten Wörtern und Zahlen sehen, die Zahlen korrekt behandelt, liegt dies daran, dass die Sortierung intelligenter ist und darüber hinaus in der Regel nur am Anfang oder Ende einer Zeichenfolge funktioniert.
quelle
Das ist das Ergebnis, wenn Sie Zahlenfolgen alphabetisch statt numerisch sortieren.
Dieser Sortierstil ist beispielsweise das Standardverhalten des Unix-
sort
Befehls, es sei denn, Sie verwenden die--numeric-sort
Befehlszeilenoption, mit der versucht wird, die numerischen Werte zu interpretieren.quelle
Andere haben Antworten, was diese Art ist, aber niemand hat Ihre Frage, warum Sie sie sehen, wirklich beantwortet. Die Antwort ist nicht wirklich aufregend. Es ist normalerweise ein Fehler. Die meisten Sortiermethoden sind standardmäßig auf die eine oder andere Art eingestellt, und die Programmierung achtet wahrscheinlich nicht darauf, die Standardeinstellung beim Sortieren von Zahlen zu ändern.
quelle