我有一个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 => value.Contains(2))返回一个Enumerable,我取第一个。我不太肯定这是使用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);
关于c# - 使用Linq检查List <List <int> []>是否包含值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38401836/