2016-03-30 5 views
0

Angenommen, ich muss mehrere Sets vergleichen und herausfinden, welche gleich sind oder nicht.Was ist die am besten geeignete Datenstruktur zum Arbeiten mit Sets in C#

Am Ende muss ich mehrere Sätze vergleichen und einen endgültigen Satz, mit eindeutigen Daten aus jedem Satz erstellen. Ich muss auch alle Artikel behandeln, die sich in verschiedenen Sätzen wiederholen.

+0

Was meinen Sie mit "Wiederholung in verschiedenen Sätzen"? ** (1) ** Ein Satz kann Duplikate enthalten, oder ** (2) ** Ein Satz darf keine Duplikate enthalten, aber Gegenstände können in mehreren Sätzen vorhanden sein. –

+0

Die "beste" Sammlung ist vollständig kontextabhängig. Manchmal ist 'List' am besten, manchmal' HashSet', manchmal 'Dictionary'. Lerne die Unterschiede zwischen ihnen und entscheide, was für diese Situation am besten ist. –

Antwort

4

Sie System.Collections.Generic.HashSet<T>

verwenden sollten, Sie können schaffen es mag:

var hashSet = new HashSet<T>(IEnumerable<T>)

und dann Methoden vergleichen:

hashSet.SetEquals(IEnumerable<T> list) - gibt true zurück, wenn Hashset und Liste gleiche Elemente enthält

hashSet.Overlaps(IEnumerable<T> list) - gibt true zurück, wenn Hashset eines der Elemente aus der Liste enthält

hashSet.IsSubsetOf(IEnumerable<T> list) - gibt true zurück, wenn Hashset Teilmenge der Liste ist (Reihenfolge ist nicht wichtig)

hashSet.IsProperSubsetOf(IEnumerable<T> list) - wie IsSubsetOf aber um Materie

hashSet.IsSupersetOf(IEnumerable<T> list) - wird ret Urne wahr, wenn Hashset Obermenge der Liste (Reihenfolge keine Rolle spielen) ist

hashSet.IsProperSupersetOf(IEnumerable<T> list) - wie IsSupersetOf aber um Materie

Auch gibt es Methoden zu ändern:

hashSet.UnionWith(IEnumerable<T> list) - wird Hashset ändern enthalten Elemente, die in aktuellen HashSet oder Liste oder in beiden vorhanden sind.

hashSet.symmetricExceptWith(IEnumerable<T> list) - modifiziert hashSet, um Elemente zu enthalten, die nur im aktuellen HashSet oder in der Liste existieren, aber nicht in beiden.

hashSet.IntersectWith(IEnumerable<T> list) - wird HashSet ändern, um Elemente zu enthalten, die in aktuellen HashSet und Liste vorhanden sind.

Für weitere Informationen über HashSet siehe MSDN article.

3

können Sie verwenden, um die HashSet<T>-Klasse, die eine Reihe von Elementen ohne Duplikate dar und stellt Methoden wie IntersectWith, UnionWith, ExceptWith usw. für gemeinsame Operationen

Verwandte Themen