Sélectionnez un élément par index dans un HashSet .NET
En ce moment je suis en utilisant un custom classe dérivée de HashSet
. Il y a un point dans le code lorsque je sélectionne les éléments sous certaine condition:
var c = clusters.Where(x => x.Label != null && x.Label.Equals(someLabel));
Il fonctionne très bien et je reçois ces éléments. Mais est-il une manière que je pourrais recevoir un index de l'élément à l'intérieur de la collection, à utiliser avec ElementAt
méthode, au lieu de l'ensemble des objets?
Il aurait l'air plus ou moins comme ceci:
var c = select element index in collection under certain condition;
int index = c.ElementAt(0); //get first index
clusters.ElementAt(index).RunObjectMthod();
Est manuellement une itération sur l'ensemble de la collection, une meilleure façon? - Je besoin d'ajouter que c'est dans une plus grande boucle, de sorte que cette Where
clause est effectuée plusieurs fois pour diverses someLabel
chaînes.
Modifier
Ce que j'en ai besoin pour? clusters
est un ensemble de clusters de certains documents de la collection. Les Documents sont regroupés en clusters par les sujets de la similitude. Ainsi, l'une des dernière étape de l'algorithme est de découvrir une étiquette pour chaque cluster. Mais l'algorithme n'est pas parfait et parfois, il fait deux ou plus de deux groupes avec la même étiquette. Ce que je veux faire est tout simplement de fusionner des armes en grand.
source d'informationauteur Ventus
Vous devez vous connecter pour publier un commentaire.
Ensembles ne font généralement pas de ont index. Si la position est importante pour vous, vous devriez être en utilisant un
List<T>
au lieu de (ou peut-être ainsi que d'un ensemble.Maintenant
SortedSet<T>
.NET 4 est légèrement différente, en ce qu'il maintient un classement de la valeur de la commande. Cependant, il n'est toujours pas mise en œuvreIList<T>
de sorte que l'accès par index avecElementAt
est lente.Si vous pouviez donner plus de détails sur pourquoi vous voulez cette fonctionnalité, il pourrait l'aider. Votre cas n'est pas vraiment claire pour l'instant.
Dans le cas où vous détenez des éléments dans HashSet et parfois vous avez besoin pour obtenir des éléments par index, envisager l'utilisation de la méthode d'extension ToList() dans de telles situations. Si vous utilisez des fonctions de HashSet et puis vous profitez de l'index.
Il n'y a pas une telle chose comme un index avec un hachage ensemble. L'une des voies de hachage définit le gain efficincy, dans certains cas, est de ne pas avoir à les maintenir.
Aussi, je ne vois pas ce que l'avantage est ici. Si vous étiez pour obtenir l'index, et de l'utiliser ensuite ce serait moins efficace que de simplement l'obtention de l'élément (l'obtention de l'indice serait tout aussi efficace, et puis vous avez un supplément de fonctionnement).
Si vous voulez faire plusieurs opérations sur le même objet, il suffit de tenir sur cet objet.
Si vous voulez faire quelque chose sur plusieurs objets, le faire sur la base d'une itération à travers eux (normal
foreach
ou de faireforeach
sur les résultats d'uneWhere()
etc.). Si vous voulez faire quelque chose sur plusieurs objets, puis faire autre chose sur ces mêmes objets, et vous devez le faire dans de tels lots, plutôt que de faire toutes les opérations dans le mêmeforeach
puis stocker les résultats de laWhere()
dans unList<T>
.