récupérer rapidement le sous-ensemble de propriétés utilisées dans une énorme collection en C #

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

Question

J'ai une énorme collection (que je peux jeter comme dénombrable en utilisant OfType <> ()) des objets. Chacun de ces objets a une propriété Category, qui est tiré à partir d'une liste quelque part ailleurs dans l'application. Cette collection peut atteindre des tailles de centaines d'articles, mais il est possible que seul, dire, 6/30 des catégories possibles sont réellement utilisés. Quelle est la méthode la plus rapide pour trouver ces 6 catégories? La taille des énormes dissuade Collection moi de tout itérer sur la chose entière et retourner toutes les valeurs uniques, donc est-il une méthode plus rapide d'y parvenir?

Idéalement je voudrais recueillir les catégories dans un List<string>.

Était-ce utile?

La solution

Si vous utilisez .NET 3.5 puis essayez ceci:

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

Il devrait être très rapide.

Je suppose que ces objets sont venus à l'origine d'une base de données? Si oui, alors vous voudrez peut-être demander à la base de données pour faire le travail pour vous. S'il y a un index sur cette colonne, vous obtiendrez le résultat proche de instantanément, sans même avoir à aller chercher les objets dans la mémoire.

Autres conseils

  

La taille de l'immense collection me décourage de tout itérer sur la chose entière et retourner toutes les valeurs uniques

Je suis peur afin de trouver toutes les catégories utilisées, vous devrez regarder chaque élément une fois, de sorte que vous pouvez difficilement éviter itérer (à moins que vous garder une trace des catégories utilisées lors de la construction de votre collection).

Essayez si la solution Mark Byers est assez rapide pour vous et ne vous inquiétez pas sur ses performances si elle est pas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top