2014-09-22 137 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

相關問題