2010-03-06 9 views
44

Immagino che un altro modo per esprimere questo sarebbe "Esiste una classe come List<> in C#, ma ottimizzata per verificare se è presente un determinato valore?" Sono sicuro che per un piccolo insieme di valori List<>.Contains probabilmente andrebbe bene, ma se avessi un set di migliaia o milioni di valori e volessi scoprire se ci fosse un certo valore?Esiste una classe come Dictionary <> in C#, ma solo per le chiavi, nessun valore?

Ho implementato questo tipo di cose in passato creando un Dictionary<object, int> e impostando il valore su 0 per ogni chiave, ma questo sembra davvero goffo. E ora c'è Stack Overflow, dove la mia stupida domanda può essere trasformata in istruzione per migliaia (dozzine, anche). Quindi eccolo!

Io non sono nemmeno sicuro di quello che una classe sarebbe chiamato, non forse Set, ricerche quindi ovviamente sul tema sono stati ... impegnativo :)

+0

possibile duplicato di [Struttura dati C# come un dizionario ma senza valore] (http://stackoverflow.com/questions/1363773/c-sharp-data-structure-like-dictionary-but-withouta-a-value) – slolife

risposta

56

Provare a utilizzare la classe HashSet<T>.

Modifica: ho passato molto tempo facendo esattamente quello che hai fatto fino a quando mi sono imbattuto in questa classe mentre leggevo un blog.

+0

+1, devo ammettere che ho fatto la stessa cosa .. :) –

+2

Inoltre, in .NET 4, questa classe implementa ora la nuova interfaccia '' ISet ', insieme al suo nuovo cugino 'SortedSet ', che è lo stesso , ma con semantica degli ordini. –

+2

Nei giorni bui di .NET 1.0 e 2.0 abbiamo appena creato una classe che funzionava essenzialmente come HashSet ma che utilizzava un dizionario di sotto. – jjxtra

Problemi correlati