检查列表<list <int> []&gt;包含使用Linq的值

时间:2016-07-15 17:17:51

标签: c# linq list

我有<div id="about"> <div class="container"> <div class="row"> <p></p> <p></p> <p></p> </div> <!-- end row --> <div class="row"> <div class="col-md-4 team"> <h1>Meet The Team</h1> </div> </div> <div class="row"> <div class="col-md-4"> <a href="bios/#.html"><img src="img/team/580x410.jpg" class="img- responsive" alt=""></a> <h1></h1> <h3 class="text-muted">Chairman &amp; CEO<br> Senior Wealth Advisor</h3> </div> <div class="col-md-4"> <a href="bios/"><img src="img/team/580x410.jpg" class="img-responsive" alt=""></a> <h1></h1> <h3 class="text-muted">President<br> Senior Wealth Advisor</h3> </div> <div class="col-md-4"> <a href="bios/.html"><img src="img/team/580x410.jpg" class="img- responsive" alt=""></a> <h1></h1> <h3 class="text-muted">Chief Operating Officer</h3> </div> </div> <!-- end row --> </div> <!-- end container --> 包含列表项目,例如

List<List<int>[]>

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

到目前为止,我可以使用Linq代码检查a或b是否包含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});

将此扩展到c

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

//上面的代码p =&gt; p.Select(value =&gt; value.Contains(2))返回一个Enumerable,我拿第一个。我不肯定这是使用linq解决这个问题的正确方法。 有没有更好的方法呢?

5 个答案:

答案 0 :(得分:7)

如果您知道如何在单个列表中进行搜索,则应该能够以完全相同的方式搜索列表列表。用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);

答案 1 :(得分:2)

我喜欢PetSerAl的任何任何答案,只需要一点点改变

contents = input()
contents = contents.encode("raw_unicode_escape")
contents = contents.decode("unicode_escape")

答案 2 :(得分:1)

你需要这样的东西:

c.Where(i=>i.Any(x=>x.Contains(2)))

答案 3 :(得分:0)

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();

答案 4 :(得分:0)

c.SelectMany(inner=>inner.SelectMany (i =>i )).Contains(2).Dump();