Wählen Sie eine eindeutige Liste von Wörtern aus Array mit LINQ aus

9

Ich versuche, eine eindeutige Liste von Wörtern aus einem Array von Wörtern mit dem folgenden Code zu erhalten:

%Vor%

Ich dachte, dies würde das doppelte Vorkommen von "this" beseitigen, aber es gibt eine Liste jedes Wortes in der Phrase zurück.

Kann jemand bitte vorschlagen, wie ich eine eindeutige Liste bekommen kann? Danke

Dave

    
DaveDev 14.02.2010, 00:11
quelle

4 Antworten

20

In Ihrem Beispiel ist jedes Word-Objekt eindeutig , weil es keinen Vergleich gibt, der die Text-Eigenschaft betrachtet.

Es gibt jedoch keinen Grund, ein neues Objekt zu erstellen:

%Vor%

Oder einfacher:

%Vor%     
James Curran 14.02.2010, 00:16
quelle
1

Das Problem ist, dass Sie mehrere Word-Objekte erstellen, die denselben Wert enthalten, aber wie sollte der Compiler wissen, dass es sich um die gleichen Elemente handelt?

Versuchen Sie

%Vor%     
citronas 14.02.2010 00:15
quelle
1

Sie haben den Code für Ihre Word -Klasse nicht veröffentlicht, aber ich rate, dass sie Equals nicht mit einem Wertvergleich implementiert, so dass Sie die Standardimplementierung von Equals erhalten, die nur die Objektreferenzen überprüft . Beachten Sie, dass Sie, wenn Sie sich entscheiden, Ihre eigene Version von Equals zu implementieren, auch GetHashCode korrekt implementieren müssen.

Eine alternative Möglichkeit zur Lösung dieses Problems besteht darin, der Funktion IEqualityComparer einen Distinct als Parameter bereitzustellen.

    
Mark Byers 14.02.2010 00:14
quelle
0

Wie andere bereits angemerkt haben, besteht das Problem wahrscheinlich darin, dass Ihr Word -Objekt keine strukturelle Gleichheit implementiert (vergleichen Sie den tatsächlichen Inhalt, nicht die Instanzreferenzen). Wenn Sie weiterhin eine Auflistung von Word -Objekten als Ergebnis erhalten möchten, aber Distinct für die zugrunde liegenden Zeichenfolgenwerte verwenden möchten, können Sie Folgendes schreiben:

%Vor%     
Tomas Petricek 14.02.2010 02:07
quelle

Tags und Links