Frage Jede Kreuzung in zwei Sammlungen


Ich muss herausfinden, ob zwei Sammlungen eine Kreuzung haben oder nicht, die Art, wie ich das gemacht habe, ist die Verwendung von LINQs "Join", um die Schnittmenge der beiden Sammlungen zu erhalten, und dann benutze ich "Any". Aber ich frage mich, gibt es andere "elegantere" Art und Weise, dies zu tun?


13
2018-05-16 22:05


Ursprung


Antworten:


Enumerable.Intersect ist wahrscheinlich, was du suchst.

Von MSDN:

int[] id1 = { 44, 26, 92, 30, 71, 38 };
int[] id2 = { 39, 59, 83, 47, 26, 4, 30 };
IEnumerable<int> both = id1.Intersect(id2);
if(both.Any())...

16
2018-05-16 22:06



bool intersects = collection1.Intersect(collection2).Any();

Dies setzt eine "angemessene" Implementierung von Gleichheit und Hashcode für die Mitglieder Ihrer Sammlung voraus (das ist z. B. bei Primitiven der Fall), andernfalls können Sie eine benutzerdefinierte übergeben IEqualityComparer.


12
2018-05-16 22:07



Hier ist eine Erweiterungsmethode, die wir verwenden:

public static bool IntersectAny<T>(this IEnumerable<T> first, IEnumerable<T> second, IEqualityComparer<T> comparer = null) {
    return first.Intersect(second, comparer).Any();
}

1
2017-09-16 13:50



Bitte guck dir das an http://msdn.microsoft.com/en-us/library/system.linq.enumerable.aspx und genauer habe ich gerade gefunden http://www.codeproject.com/Articles/383749/How-does-it-works-in-Charp-Part-3-Csharp-Linq-in-d wird sehr hilfreich sein.


0
2018-05-17 00:24