Ich habe eine Liste solcher Parameter:
public class parameter
{
public string name {get; set;}
public string paramtype {get; set;}
public string source {get; set;}
}
IEnumerable<Parameter> parameters;
Und eine Reihe von Zeichenfolgen, mit denen ich es überprüfen möchte.
string[] myStrings = new string[] { "one", "two"};
Ich möchte die Parameterliste durchlaufen und prüfen, ob die Quelleigenschaft einem der myStrings-Arrays entspricht. Ich kann dies mit verschachtelten foreachs tun, aber ich würde gerne lernen, wie man es auf eine schönere Art und Weise macht, da ich mit linq herumgespielt habe und die Erweiterungsmethoden auf enumerable mag, wie wo usw. verschachtelte foreachs sich einfach falsch anfühlen. Gibt es eine elegantere bevorzugte Methode für linq / lambda / delegete, um dies zu tun?
Vielen Dank
Intersect
ist dies schneller - wenn die Listen trivial kurz sind, spielt dies auf die eine oder andere Weise keine Rolle (in diesem Fall ist die Leistung wahrscheinlich sowieso nicht Ihr Anliegen )parameters.Any(x => myStrings.Contains(x.source));
besser als Ihr erstes Beispiel?Hier ist ein Beispiel, um festzustellen, ob Übereinstimmungselemente in einer anderen Liste vorhanden sind
quelle
Intersect
Ansatz ist, da es in den Größen der Listen O (N * M) ist. (Es ist O (1) in Erinnerung.)Wenn beide Listen zu groß sind und wir den Lamda-Ausdruck verwenden, dauert das Abrufen lange. Verwenden Sie in diesem Fall besser linq, um die Parameterliste abzurufen:
quelle