Check a List[]> 包含一个使用 Linq 的值

本文关键字:List 的值 Linq int Check 包含一 | 更新日期: 2023-09-27 17:57:12

我有一个包含列表项目的List<List<int>[]>,例如

List<int> a= new List<int>(){ 2, 2, 3, 4, 5};
List<int> b= new List<int>() { 2, 2, 2, 6 };
List<List<int>[]> c = new List<List<int>[]>();
c.Add(new[]{a,b});

我想检查 c 中包含的任何数组是否有 2 作为值。这或多或少是一个真或假的答案。

到目前为止,我可以使用 Linq 代码检查 a 或 b 是否包含 2

var result = a.Any(p=> p==2); // this outputs 2

将其扩展到 C

var result=c.Any(p=> p.Select(value => value.Contains(2)).First());

上面的代码 p=> p.Select(value => 值。包含(2)) 返回一个枚举,我采用第一个。我不肯定这是使用 linq 解决此问题的正确方法。有没有更好的方法

Check a List<List<int>[]> 包含一个使用 Linq 的值

如果您知道如何在单个列表中搜索,您应该能够以完全相同的方式在列表列表中搜索。只需用SelectMany将其展平并使用相同的标准即可。

对于您的情况,如果这是针对单个列表:

var result = a.Any(p => p == 2);

那么对于列表列表,它将是:

var result = c.SelectMany(x => x).Any(p => p == 2);

与示例中的第三级类似:

var result = c.SelectMany(x => x).SelectMany(x => x).Any(p => p == 2);

我喜欢PetSerAl的任何答案,但只是一个微小的变化

c.Any(x => x.Any(y => y.Contains(2)))

你需要这样的东西:

c.Where(i=>i.Any(x=>x.Contains(2)))
List<int> a = new List<int>() { 2, 2, 3, 4, 5 };
List<int> b = new List<int>() { 2, 2, 2, 6 };
List<List<int>[]> c = new List<List<int>[]>();
c.Add(new[] { a, b });
//Lambda
bool IsValueExists = c.Any(i => i != null && i.Any(i1 => i1.Any(i2=>i2 == 2)));
//OR
//Linq
bool IsValueExists = (from i in c
                      from i1 in i
                      from i2 in i1
                      where i2 == 2
                      select i2).Any();
c.SelectMany(inner=>inner.SelectMany (i =>i )).Contains(2).Dump();