Gepostet: |
DataMap sortieren | ||||||||||
Hallo an alle, würde gerne wissen welche Möglichkeiten es gibt eine DataMap zu sortieren. In eine DataMap speichere ich als Keys Strings. Diese sollen auf eine bestimmte Art lexikografisch sortiert werden. Erst Kleinbuchstaben und bei gleichem Wort, soll das Wort mit dem größeren Buchstaben zu erst stehen. Ich verwende DataMaps, da mir gesagt wurde, dass diese auf Grund ihrer Veränderlichkeit eine bessere Performance als Listen besitzen. Nur weiß ich nicht wie ich die vorgebebene Sortierstruktur brechen kann und eine eigene implementieren kann. Habe schon irgendwo gelesen dass ich sie in eine Liste umformen könnte und dann diese sortieren könnte. Bringt aber finde ich nicht wirklich was da ich dann a) wieder das Performance Problem habe und b) die Liste dann eh nicht wieder in dieser Reihenfolge als DataMap abspeichern kann da dann immer wieder die vorgelegte Reihenfolge von DataMap verwendet wird. Irgendwelche Ideen was ich machen könnte? |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hat jetzt noch keiner darauf geantwortet, da es keiner weiß oder weil es so trivial ist. Ich meine kann doch nicht sein, dass noch nie jemand über dieses PRoblem gestoßen ist? Ich finde auch wirklich überhaupt nichts im Internet wie man das machen könnte.... | |||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Hallo, deine Ordnungsfunktion ist mir nicht ganz klar, aber wenn du weiß, wie du diese implementieren kannst, sollte der folgende Ansatz funktionieren. Data.Map sortiert die Elemente intern nach ihrer Ordnung, benötigt also eine Ord-Instanz für die Elemente. Du kannst dir nun einen neuen Datentyp MyString erzeugen, der nur einen Konstruktor zur Verfügung stellt und selbst wieder einen normalen String speichert: data MyString = MyString String deriving (Eq) Für diesen Datentyp kannst du nun eine Ord-Instanz ableiten und mit der compare-Funktion entscheiden, wie zwei Elemente innerhalb der Ordnung in Beziehung stehen: instance Ord MyString where Wenn du nun in deiner Map nur Elemente des Typs MyString speicherst, wird die korrekte Ordnung automatisch erzeugt. Viele Grüße siracusa |
|||||||||||
Zum Seitenanfang | |||||||||||
Gepostet: |
|||||||||||
Du kannst einen Schritt weiter gehen, und einen generellen Wrapper dafür schreiben:
Jetzt kannst du beliebige Ord-Instanzen für Key schreiben (du brauchst dafür FlexibleInstances). Hier ist ein Beispiel für eine case-insensitive Map:
|
|||||||||||
Zum Seitenanfang | |||||||||||