2014-09-22 77 views
2

名单的名单有一个LINQ的方式来找出是否,例如:查找类型的列表是否包含在类型

List<int> micro = new List<int>(){1,2,3,4,5}; 

处于

List<List<int>> macro = new List<List<int>>(); 

我可以做宏foreach循环,并检查它是否包含至少一个List具有所有微的项目(macro[0].Contains(1) && macro[0].Contains(2)...)的,但有一个更C#的方式来做到这一点?

回答

9
bool exists = macro.Any(x => micro.All(x.Contains)); 

如果订单和元素的数量是重要的用途SequenceEqual

bool exists = macro.Any(x => x.SequenceEqual(micro)); 
+0

它的工作原理!太棒了。我会在几分钟内接受它。 – Tyress 2014-09-22 10:07:44

+2

是的。请注意,这不会*意味着,'macro'包含确切的'micro'对象。它“只是”意味着'macro'包含一个'IEnumerable',它具有与'micro'相同的项目。另外,该'IEnumerable'可能有* more *项目比'micro'。 – Corak 2014-09-22 10:10:19

+0

如果你正在寻找完全相同的列表实例,可以在'Any()'中使用'object.ReferenceEquals()'。 – 2014-09-22 10:11:20

-1

请尝试以下,其工作的罚款。

 string listElems = string.Join(",",micro); 
     bool exists = macro.Any(x=>string.Join(",",x)==listElems); 

希望这对你很好。 :) 快乐编码。

+1

请不要。构建字符串,然后检查字符串相等性具有可怕的性能。另外,这样,项目顺序很重要,OP似乎并不需要。所以这基本上做'macro.Any(x => x.SequenceEqual(微))'只会更糟糕。 – Corak 2014-09-22 10:42:16

+0

我同意。谢谢 – JJRS 2014-09-22 10:50:13

相关问题