Vorrei utilizzare un tipo che si comporta come un semplice elenco di coppie [(a,b)]
che funge da dizionario, associando chiavi di tipo a
a valori di tipo b
, mantenendo un "utente" -specificato ", definito l'ordine delle chiavi. (vale a dire, proprio come con le liste ordinarie, mi piacerebbe poter "aggiungere" un elemento che viene riconosciuto come "ultimo elemento"). Tuttavia, mi piacerebbe che la ricerca di accesso casuale sui tasti fosse migliore delle prestazioni lineari, ovvero cosa,fornisce. Una possibilità sarebbe quella di mantenere solo una carta ordinaria, oltre a un elenco di chiavi che definisce il loro ordine:Un tipo di dizionario con un ordine definito di chiavi
data OrderedDict a b = OrderedDict (Map a b) [a]
e quindi definire append
operazioni, ecc che mantengono le due collezioni principali in sincronia. Sembra brutto però mantenere due raccolte separate delle stesse chiavi. Esiste un tipo di dati già pronto che combina già le chiavi ordinate con una ricerca di accesso casuale efficiente per chiave?
Java [LinkedHashMap] (http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html) sembra fare qualcosa di simile : crea una lista di chiavi attraverso la mappa. OrderedDict di Python è semplicemente un elenco di coppie, quindi non sono di aiuto qui. –
Cosa intendi con "ordine definito"? Dato due chiavi 'a1' e' a2', è a priori corretto se 'a1' precede' a2' o è la precedenza determinata in fase di esecuzione? – Peter
@peter Voglio dire 'ordine definito' nello stesso senso come con le liste ordinarie - se aggiungo 'a2' dopo aver aggiunto' a1', quindi 'a1' precede' a2' – gcbenison