it-swarm.dev

Warum sortieren einige Sortiermethoden nach 1, 10, 2, 3 ...?

Mir ist 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 brauche die erste Methode und als Benutzer bin ich 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? Wie lauten die offiziellen Namen für jede Sortiermethode?

32
VirtuosiMedia

das heißt lexikografisch Sortierung, was bedeutet, dass die Sprache die Variablen im Grunde genommen 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 Ganzzahlen behandelt werden.

  • voranstellen '0' zu den Zeichenfolgen, damit alle gleich lang sind (nur möglich, wenn Sie den Maximalwert kennen).
    Aus diesem Grund werden in Mediendateien (S1E01) Episodennummern mit einer vorangestellten 0 angezeigt, damit eine lexikografische Sortierung die Dinge nicht durcheinander bringt 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, vergleichen Sie die lexikografisch (Vorsicht beim Führen von '0')

64
ratchet freak

Alphabetisch steht 1 vor 2. Immer wenn Sie die erste Methode sehen, liegt dies nicht daran, dass dies wünschenswert ist, sondern daran, dass die Sortierung streng alphabetisch ist (und von links nach rechts jeweils ein Zeichen erfolgt): 1, 2 , 1 macht für Sie Sinn, aber nicht für einen Computer, der nur alphabetische Vergleiche kennt. Bei einem solchen einfachen Vergleich gibt es keine Möglichkeit zu wissen, dass tatsächlich eine Eins gefolgt von einer kommt nach einer Zwei.

Wenn Sie eine gemischte Wort- und Zahlensortierung sehen, die Zahlen richtig behandelt, liegt dies daran, dass die Sortierung intelligenter ist und darüber hinaus normalerweise nur am Anfang oder Ende einer Zeichenfolge funktioniert.

6
Nicole

Andere haben Antworten darauf, 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. Bei den meisten Sortiermethoden wird standardmäßig die eine oder andere verwendet, und bei der Programmierung wird die Standardeinstellung beim Sortieren von Zahlen wahrscheinlich nicht berücksichtigt.

4
frankc

Dies ist das Ergebnis, wenn Sie Zahlenfolgen alphabetisch statt numerisch sortieren.

Dieser Sortierstil ist beispielsweise das Standardverhalten des Unix-Befehls sort, es sei denn, Sie verwenden --numeric-sort Befehlszeilenoption, die anweist, dass versucht werden soll, die numerischen Werte zu interpretieren.

4
whatsisname