Chciałbym użyć typu, który zachowuje się jak prosta lista par [(a,b)]
, który służy jako słownik, odwzorowuje klucze typu a
na wartości typu b
, zachowując "użytkownika" -specified ", zdefiniowana kolejność klawiszy. (tak jak w przypadku zwykłych list - chciałbym móc "dołączyć" element, który jest następnie rozpoznawany jako "ostatni element"). Jednak chciałbym wyszukać przypadkowo dostęp do kluczy o wydajności lepszej niż liniowa, tj. co Data.Map
zapewnia. Jednym rozwiązaniem byłoby po prostu utrzymać mapę zwyczajne oprócz listy kluczy, która określa ich kolejność:Typ słownika z określoną kolejnością klawiszy
data OrderedDict a b = OrderedDict (Map a b) [a]
a następnie zdefiniować append
operacje itp, które prowadzą dwie główne kolekcje zsynchronizowane. Wydaje się jednak, że brzydkie jest utrzymywanie dwóch oddzielnych kolekcji tych samych kluczy. Czy istnieje gotowy typ danych, który już łączy klucze uporządkowane z wydajnym wyszukiwaniem losowym według klucza?
Java [LinkedHashMap] (http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html) wydaje się robić coś podobnego : wątek lista kluczy przez mapę. Python's OrderedDict to po prostu lista par, więc nie są tu pomocą. –
Co masz na myśli mówiąc "zdefiniowany porządek"? Biorąc pod uwagę dwa klucze 'a1' i' a2', czy a priori ustalono, czy 'a1' poprzedza' a2', czy też jest priorytetem określonym w czasie wykonywania? – Peter
@peter Mam na myśli "zdefiniowaną kolejność" w tym samym znaczeniu, co w przypadku zwykłych list - jeśli dodam "a2" po dodaniu "a1", to "a1" poprzedza 'a2' – gcbenison