2015-07-02 16 views
1

我有一些使用C#中的條件製作的列表..因此,如果任何條件是錯誤的列表仍然是空的..但我仍然需要與其他列表相交,以獲得最終的輸出..任何建議如何做到這一點?如何交叉多個列表,如果其中一個將是空的?

+0

「......一些使用某些條件的列表......」你能更具體地說明你擁有什麼,想要什麼,嘗試過什麼,什麼不起作用?目前還不清楚。 –

+0

請提供一些您已經嘗試過的代碼示例。這將有助於用戶更清楚地瞭解這個問題。 – Golda

+1

你需要與一個非空的空列表相交?結果將是空的,你知道嗎? – HimBromBeere

回答

1

Enumerable.Intersect即使一個IEnumerable<T>爲空,也可以執行此操作。

但是,只要至少有一個空列表,相交結果將始終爲空 - 這是您需要的嗎?

+0

我認爲列表在某些情況下可能是空的,並不總是 – fred

+1

這也是我的理解。我編輯了我的答案,以澄清我的意思是「總是」的範圍。 ;) – nodots

0

如果我理解正確的話,你可以使用Count財產

List<Object> your_list = new List<Object>(); 
if(your_list.Count!=0){ 
// do your stuff 
} 
else{ 
//skip 
} 
1

所以,你把所有的名單後,把它們放到一個數組,那麼你可以做波紋管樣品(假設你有所有字符串列表)

 var list1 = new List<string>(); 
     var list2 = new List<string>(); 
     var list3 = new List<string>(); 

     var allLists = new List<string>[] { list1, list2, list3 }; 
     // need to be sure you have >= 1 list(s) 
     var result = allLists[0]; 

     for (int i = 1; i < allLists.Length; i++) 
     { 
      result = result.Intersect(allLists[i]).ToList(); 
     } 

     // ok, you get the result 
+0

我按照馬特所講的那樣與列表本身相交! – Rasika

3

作爲簡單的靜態方法:

static IEnumerable<T> Intersect<T>(params IEnumerable<T>[] lists) 
{ 
    return lists.Where(l => l.Any()).Aggregate((l1, l2) => l1.Intersect(l2)); 
} 

你可以像使用它

var list1 = new List<string>() { "abc", "cde" }; 
var list2 = new List<string>() { "abc", "xyz" }; 
var list3 = new List<string>(); 

var arrayOfLists = new List<string>[] {list1, list2, list3}; 

var paramList= Intersect(list1, list2, list3); 
var arrayList = Intersect(listOfLists); 

要小心地傳遞一個數組而不是列表,否則T是List返回原始列表。

+0

謝謝.. !!這有幫助! – Rasika

+1

不客氣。如果這是正確的解決方案,我將很感激將其標記爲答案。 – Matt

+0

默認情況下,這應該添加到.NET Framework中。 –

相關問題