检查列表 包含任何其他名单 检查列表 包含任何其他名单(Check if list

2019-06-02 11:41发布

我有这样的参数列表:

public class parameter
{
    public string name {get; set;}
    public string paramtype {get; set;}
    public string source {get; set;}
}

IEnumerable<Parameter> parameters;

和字符串数组我要检查它反对。

string[] myStrings = new string[] { "one", "two"};

我想遍历参数列表检查源属性等于任何myStrings阵列。 我能做到这一点与嵌套的foreach的,但我想学习如何做一个更好的方式,因为我一直在使用LINQ和像枚举的扩展方法等,其中等这样的嵌套foreachs只是觉得不对玩耍。 是否有一个更优雅的首选LINQ /λ/ delegete的方式来做到这一点。

谢谢

Answer 1:

你可以使用一个嵌套的Any()此检查,您可在任何Enumerable

bool hasMatch = myStrings.Any(x => parameters.Any(y => y.source == x));

更快的执行在较大的集合。将投影parameterssource ,然后使用Intersect ,其在内部使用HashSet<T>所以不是为O(n ^ 2)为第一种方法(两个嵌套循环的等价物)可以执行检查在O(N):

bool hasMatch = parameters.Select(x => x.source)
                          .Intersect(myStrings)
                          .Any(); 

另外,作为一个侧置评,你应该利用你的类名和属性名与C#风格的准则相吻合。



Answer 2:

这里是一个样本,以寻找是否有另一个列表匹配的元素

List<int> nums1 = new List<int> { 2, 4, 6, 8, 10 };
List<int> nums2 = new List<int> { 1, 3, 6, 9, 12};

if (nums1.Any(x => nums2.Any(y => y == x)))
{
    Console.WriteLine("There are equal elements");
}
else
{
    Console.WriteLine("No Match Found!");
}


文章来源: Check if list contains any of another list