I ont une collection d'objets que je voudrais comparer l'égalité à l'aide d'une méthode qui ressemble à ceci:objets du groupe par l'égalité
bool AreEqual (MyObject O1, O2 MyObject);
Quel serait le moyen le plus convivial pour regrouper tous les objets égaux? La réponse évidente serait de comparer chaque objet avec tous les autres objets de la collection mais cela nuirait plutôt à la performance (N^N, je crois).
Le groupe LINQ par opérateur pourrait-il offrir une solution?
EDIT:
Je serais peut-être nommé MyObject TheirObject que je ne peux pas modifier sa mise en œuvre (et il ne met pas en œuvre IComparable). Cela signifie que je vais probablement utiliser la solution d'ICR.
Nous vous remercions de votre échantillon. Avec votre permission, j'aimerais l'utiliser dans mon projet. Les dernières lignes sont particulièrement intéressantes. Quel avantage la boucle finale offre-t-elle par rapport à un simple "groupe de retour"? ? – Opflash
Comme je le dis, je recommande toujours la solution LINQ. C'est à peu près la même chose, mais c'est déjà écrit pour vous. La raison pour laquelle j'ai donné l'échantillon était que vous pouvez voir comment un tel algorithme pourrait fonctionner. Le but des lignes finales est parce que j'aime renvoyer le type le plus général applicable - dans ce cas IEnumerable. Mais pour les construire, vous devez utiliser IList pour avoir la méthode Add. C# ne peut actuellement pas trouver comment transformer un IEnumerable en un IEnumerable > donc vous devez céder chaque groupe manuellement. L'avantage est qu'il compile :) –
ICR
Ce n'est vraiment pas une bonne implémentation, car c'est O (n^2). Veuillez utiliser la méthode d'extension Linq 'GroupBy' existante. – ErikE