2010-09-28 7 views
6

Qui disegno uno spazio vuoto; Non riesco a trovarlo, a meno che non mi stia davvero guardando qualcosa sotto il naso.Quali strutture dati in .NET fanno O (1) sulle chiamate Contains()?

Sto tentando di memorizzare un elenco di int s in una struttura dati.
Ma dopo averli aggiunti, in seguito, verificherò in codice se esiste già uno int nell'elenco.

Il generico List<int> esegue un'operazione O (n) con il suo Contains().
Voglio qualcosa che funzioni velocemente come Dictionary<> 's Contains(), che esegue un'operazione O (1) perché blocca le chiavi.

So che la risposta è una cosa così semplice e che ho lavorato troppo a lungo oggi non riesco a ricordarlo.

Help!

risposta

9

HashSet<T> lavoro per voi?

+0

non può essere utilizzato se è davvero necessario memorizzare un elenco, tuttavia (l'ordine verrà perso). – Thilo

+1

Wow that simple ... ed è stato GIUSTO di fronte a me per tutto il tempo. Vorrei poter rispondere a questa domanda più velocemente =). Grazie! – BeemerGuy

+0

Oh, non mi interessa l'ordine, Thilo. Questo è esattamente quello che voglio; solo un sacco di interi che posso indicizzare rapidamente. – BeemerGuy

1

Dato che lavoro con C# 2.0 a causa di vincoli di piattaforma, di solito uso Dictionary<int,bool>, con il vincolo che se una chiave è nella mappa, il valore bool è true (quindi il bool non codifica realmente alcuna informazione - è solo un sostituto per il tipo di unità mancante da. NET).