2 Stimmen

C# List<string> "enthält" Frage

Gibt es eine einfache Möglichkeit, entweder durch LINQ oder Generics, um herauszufinden, ob Elemente in einer Liste alle in einer anderen Liste verfügbar sind.

Ich verwende derzeit Intersect, um dies zu überprüfen.

z.B.

List<string> list1; //{ 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }

List<string> list2; //{ 1, 3, 9 }

list1.Contains(list2) == true

Vielen Dank im Voraus

8voto

Brian Rasmussen Punkte 112118

En Intersect Methode erhalten Sie alle Elemente, die in beiden Listen enthalten sind.

z.B.

var inboth = list1.Intersect(list2);

oder wenn Sie nur wissen wollen, ob es gemeinsame Elemente zwischen den beiden gibt

if(list1.Intersect(list2).Any()) ...

6voto

mqp Punkte 66863

Intersect ist ein guter Weg, dies zu tun. Der einzige andere vernünftige Weg ist, es einfach zu erzwingen:

list2.All(x => list1.Contains(x));

Beachten Sie, dass keine der beiden Techniken funktioniert, wenn zum Beispiel, list2 est (1 2 2) et list1 est (1 2 3) und Sie wollen, dass das zurückkommt false . Wenn Sie das überprüfen wollen, würde ich beide Listen sortieren und sie gemeinsam abarbeiten.

2voto

Filip Ekberg Punkte 35716
var list1 = new [] {5, 4, 1, 3, 9, 8, 6, 7, 2};
var list2 = new[] {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5};

var hasItems = list1.Where(x => list2.Contains(x)).Any();

1voto

Alastair Pitts Punkte 19057

Der Intersect ist dafür perfekt geeignet. Wenn Sie verzweifelt nach einem booleschen Ergebnis suchen, könnten Sie eine benutzerdefinierte Erweiterungsmethode schreiben, die für .Contains()

    public static bool WholeyContains<T>(this IEnumerable<T> first, IEnumerable<T> second)
    {
        return second.SequenceEqual(first.Intersect(second));
    }

1voto

Bonshington Punkte 3752
var a = new int[]{ 1, 2, 3 };
var b = new int[] { 1, 2, 3, 4, 5 };

bool result = (from numA in a
               join numB in b
               on numA equals numB
               into joined
               select joined).Count().Equals(a.Count()); // or b.Count()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X