Entwickler-Ecke
Basistechnologien - Numerisches sortieren alphanumerischer strings
Määx - Fr 21.03.14 11:45
Titel: Numerisches sortieren alphanumerischer strings
Hallo zusammen,
ich habe ein Problem mit der Sortierung von meinen Daten. Diese kommen ursprünglich zwar aus einer Datenbank (Entityframework, Linq) aber denke es passt trotzdem am besten an diese Stelle...
Also ich habe eine Spalte mit strings, die wie folgt aussehen können: "10", "hallo", "5m", "1" . Lasse ich dies nun normal aus/absteigend sortieren, erhalte ich etwas wie: "1", "10", "5m", "hallo". Nun möchte ich aber "1", "5m", "10", "hallo" als Ergebnis erhalten... Ist sowas möglich? also quasi die string zunächst numerisch betrachten...
Bin für eure Hilfe wiedermal dankbar!!
Määx
Ralf Jansen - Fr 21.03.14 12:03
Zitat: |
Ist sowas möglich? also quasi die string zunächst numerisch betrachten... |
Du hast es doch schon beschrieben. Sortiere zuerst nach dem numerischen Teil (also mußt du denn aus dem string erstmal extrahieren damit du danach sortieren kannst) und dann nach dem Rest.
C#-Quelltext
1: 2:
| var list = new [] { "10", "hallo", "5m", "1" }; var sorted = list.OrderBy(x => new string(x.TakeWhile(y => Char.IsDigit(y)).ToArray())).ThenBy(z => new string(z.SkipWhile(c => Char.IsDigit(c)).ToArray())); |
Aber die genaue Definition deiner Sortierung solltest du dir überlegen und festlegen. Wenn du zuerst numerisch sortieren willst hat "hallo" keinen numerischen Wert. Nichts ist immer kleiner als irgendeine Zahl. "hallo" kommt nach dieser Definition also zuerst. Anders als du es in deinem Beispiel gezeigt hast. Heißt deine Beschreibung passt nicht zu deinem Beispiel.
jfheins - Fr 21.03.14 12:09
Ja, klar ist das möglich.
Ich würde eine eigene Vergleichsfunktion schreiben, die den Anfang des Strings auf Ziffern überprüft. Falls in beiden Strings Ziffern enthalten sind, kannst du diese vergleichen. Falls nur in einem Ziffern sind, 1 oder -1 zurück geben. Sind in beiden Strings keine Ziffern am Anfang, dann auf den string-Vergleich zurückgreifen.
Vielleicht hilft dir auch dieses hier weiter:
http://stackoverflow.com/a/248613/1974021 Die Leute von Microsoft haben sich da ja auch mal Gedanken gemacht, wie Dateien im Explorer sortiert werden sollten.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!