ist eine deutlich effizientere Lösung als die anderen hier gepostet, vor allem die oberste Lösung:
bool isSubset = t2.All(elem => t1.Contains(elem));
Wenn Sie ein einzelnes Element in t2 finden, das nicht in t1 ist, dann wissen Sie, dass t2 keine Untermenge von t1 ist. Der Vorteil dieser Methode besteht darin, dass sie im Gegensatz zu den Lösungen, die .Except oder .Intersect verwenden, im Gegensatz zu den Lösungen direkt vor Ort bereitgestellt wird, ohne zusätzlichen Speicherplatz zuzuweisen. Außerdem kann diese Lösung brechen, sobald ein einzelnes Element gefunden wird, das die Teilmengenbedingung verletzt, während die anderen die Suche fortsetzen. Unten ist die optimale lange Form der Lösung, die in meinen Tests nur marginal schneller ist als die obige Kurzschriftlösung.
bool isSubset = true;
foreach (var element in t2) {
if (!t1.Contains(element)) {
isSubset = false;
break;
}
}
Ich habe einige rudimentäre Performance-Analyse aller Lösungen, und die Ergebnisse sind drastisch. Diese beiden Lösungen sind etwa 100x schneller als die Lösungen .Except() und .Intersect() und verwenden keinen zusätzlichen Speicher.
Wenn die Listen sortiert sind (wie in Ihrem Beispiel), sollte dies in O (n + m) Zeit möglich sein. –