Esiste una struttura dati che consenta l'accesso a una proprietà dell'oggetto con due chiavi in entrambi gli ordini?

4

Diciamo, per un esempio arbitrario, che voglio memorizzare informazioni sulle città gemellate. Voglio poter accedere ai dati sul gemellaggio avendo come chiavi i nomi di entrambe le città, ma partendo dal presupposto che nessuno dei due è la chiave "iniziale". Quindi dovrei accedere alla proprietà dei dati in questo modo: twinning_data['derby', 'montreal'] = { 'year': 1986 } o al contrario: twinning_data[ 'montreal', 'derby'] = { 'year': 1986 } .

Il meglio che riesco a fare è solo concatenare le stringhe e poi provarne una e poi viceversa. Forse c'è un hash indipendente dall'ordine che si può usare?

    
posta starfish 23.10.2016 - 17:55
fonte

2 risposte

2

Potresti aggiungerli carattere per carattere o eseguire qualsiasi altra operazione commutativa, quindi cancellare il risultato.

    
risposta data 23.10.2016 - 18:36
fonte
2

Potresti usare un normale Map con Bag<City> o Set<City> come chiavi. Map s, Set s, e in misura minore Bag s sono solitamente disponibili in qualsiasi libreria di collezioni / strutture dati decente.

Ecco un esempio in Ruby:

require 'set'

twinning_data = { Set['derby', 'montreal'] => { year: 1986 } }
twinning_data[Set['montreal', 'derby']]
#=> { :year => 1986 }

Ovviamente, Bag s e Set s possono tecnicamente avere un numero arbitrario di elementi, mentre tu vuoi avere esattamente 2; ergo, il tipo non è particolarmente preciso. Un tipo più preciso sarebbe una sorta di tipo BinaryUndirectedRelation , che tuttavia, probabilmente non esiste facilmente al di fuori di una libreria di grafi o dei componenti interni di un kernel RDBMS.

    
risposta data 23.10.2016 - 22:09
fonte

Leggi altre domande sui tag