Ich möchte einen Typ verwenden, der sich wie eine einfache Liste von Paaren [(a,b)]
, die als ein Wörterbuch dient, Tasten des Typs a
auf Werte des Typs b
, unter Beibehaltung eines "Benutzers "spezifizierte", definierte Reihenfolge der Schlüssel. (also wie bei gewöhnlichen Listen - ich würde gerne ein Element "anhängen" können, das dann als "letztes Element" erkannt wird.) Allerdings möchte ich auf Tasten mit besserer als linearer Performance nach dem Zufallsprinzip suchen, also was Data.Map
bietet. Eine Möglichkeit wäre, nur eine gewöhnliche Karte zusätzlich zu einer Liste von Schlüsseln zu halten, die ihre Reihenfolge definiert:Ein Dictionary-Typ mit einer definierten Reihenfolge der Schlüssel
data OrderedDict a b = OrderedDict (Map a b) [a]
und dann append
Operationen definieren, etc., die die beiden wichtigsten Sammlungen synchron zu halten. Es scheint jedoch hässlich, zwei getrennte Sammlungen derselben Schlüssel zu verwalten. Gibt es einen vorgefertigten Datentyp, der bereits geordnete Schlüssel mit effizientem wahlfreiem Zugriff nach Schlüsseln kombiniert?
Java [LinkedHashMap] (http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html) scheint etwas ähnliches zu tun : Fädle eine Liste von Schlüsseln durch die Karte. Pythons OrderedDict ist einfach eine Liste von Paaren, also sind sie hier keine Hilfe. –
Was meinst du mit "definierte Reihenfolge"? Wenn zwei Schlüssel 'a1' und' a2' gegeben sind, ist es a priori festgelegt, ob 'a1' vor' a2' steht oder ist die Priorität zur Laufzeit festgelegt? – Peter
10 @peter Ich meine 'definierte Reihenfolge' im selben Sinne wie bei gewöhnlichen Listen - wenn ich 'a2' anfüge, nachdem ich' a1' angehängt habe, dann 'a1' vorangestellt' a2' – gcbenison