2010-05-26 10 views
5

Ho un dizionario con valori non univoci e voglio contare le corrispondenze di una stringa rispetto ai valori.Restituisce il numero di corrispondenze dal dizionario C#

Fondamentalmente ora faccio dict.ContainsValue (a) per ottenere un bool che mi dice se la stringa a esiste in dict, ma voglio sapere non solo se esiste ma quante volte esiste (e può anche darsi che ottenga un elenco delle chiavi a cui è associato)

C'è un modo per farlo utilizzando il dizionario o devo cercare una raccolta diversa?

/Rickard Haake

+1

Quale versione del framework stai usando? –

+0

4.0 quindi l'approccio di collegamento da Simon Steele era perfetto. –

risposta

9

Per ottenere il numero di istanze del valore che si potrebbe fare qualcosa di simile:

dict.Values.Count(v => v == a); 

Per trovare le chiavi che hanno questo valore si potrebbe fare questo:

dict.Where(kv => kv.Value == a).Select(kv => kv.Key); 
+0

Grazie, è perfetto –

4

Per ottenere il Values.Count uso conteggio:

int count = dict.Values.Count(x => x == "foo"); 

per ottenere le chiavi io preferisco la sintassi di query:

var keys = from kvp in dict 
      where kvp.Value == "foo" 
      select kvp.Key; 

Nota che ciò richiederà la scansione l'intero dizionario. Per piccoli dizionari o ricerche poco frequenti questo potrebbe non essere un problema.

Se si stanno effettuando molte ricerche, è possibile che si desideri mantenere un secondo dizionario che associa i valori ai tasti. Mentre questo velocizzerà le ricerche, rallenterà le modifiche poiché entrambi i dizionari dovranno essere aggiornati per ogni cambiamento.

+0

Grazie, questa è una buona risposta. –

1

cosa sull'utilizzo LINQ: se a è il valore che stai cercando, il codice potrebbe essere

dict.Values.Where(v => v == a).Count(); 
Problemi correlati