recuperare rapidamente il sottoinsieme di proprietà utilizzate in una collezione enorme in C #

StackOverflow https://stackoverflow.com/questions/2738155

Domanda

Ho una collezione enorme (che posso lanciare come un enumerabile utilizzando OfType <> ()) degli oggetti. Ognuno di questi oggetti ha una proprietà Category, che è tratto da un elenco da qualche altra parte nella domanda. Questa collezione può raggiungere dimensioni di centinaia di oggetti, ma è possibile che solo, dicono, 6/30 delle possibili categorie sono effettivamente utilizzati. Qual è il metodo più veloce per trovare questi 6 categorie? La dimensione delle collezione enorme mi scoraggia a partire da soli l'iterazione attraverso l'intera cosa e la restituzione di tutti i valori unici, così c'è un più veloce metodo per realizzare questo?

Idealmente mi piacerebbe raccogliere le categorie in una List<string>.

È stato utile?

Soluzione

Se si utilizza .NET 3.5 quindi provare questo:

List<string> categories = collection
    .Cast<Foo>()
    .Select(foo => foo.Category)
    .Distinct()
    .ToList();

Dovrebbe essere molto veloce.

Suppongo che questi oggetti originariamente provenivano da un database? Se è così allora si potrebbe desiderare di chiedere il database per fare il lavoro per voi. Se c'è un indice su quella colonna, allora si otterrà il risultato vicino al istantaneamente senza nemmeno dover andare a prendere gli oggetti in memoria.

Altri suggerimenti

  

La dimensione della vasta collezione mi scoraggia da solo l'iterazione attraverso l'intera cosa e ritorno tutti i valori unici

ho paura al fine di trovare tutte le categorie utilizzate, si dovrà esaminare ogni elemento una volta, in modo da poter difficilmente evitare di iterazione (a meno di tenere traccia delle categorie utilizzate, mentre la costruzione vostra collezione).

Prova se la soluzione Mark Byers è abbastanza veloce per voi e solo preoccupare le sue prestazioni se non lo è.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top