2013-03-23 94 views
8

如果符合特定要求,是否有方便的方法從另一個列表中刪除嵌套列表?例如,假設我們有一組停靠點,並且我們決定將每個停靠點集合稱爲一條路線。每條路線都在列表中。然後,我們決定將每條路線放入列表中。C#從列表中刪除列表

所以現在我們有一個路由列表,有人決定某些類型的路由確實不應該包含在路由列表中。我怎樣才能刪除這些路線?下面是一些示例代碼:

示例類

public class Stops 
{ 
    public Stops(int _param1, string _param2) 
    { 
     param1 = _param1; 
     param2 = _param2; 
    } 

    public int param1 { get; set; } 
    public string param2 { get; set; } 
} 

創建列表

List<List<Stops>> lstRoutes = new List<List<Stops>>(); 
List<Stops> lstStops = new List<Stops>(); 
List<Stops> lstMoreStops = new List<Stops>(); 

// Create some stops 
for (int i = 0; i < 5; i++) 
{ 
    lstStops.Add(new Stops(i, "some text")); 
} 

lstRoutes.Add(lstStops); 

// Create some more stops 
for (int i = 5; i < 10; i++) 
{ 
    lstMoreStops.Add(new Stops(i, "some more text")); 
} 

lstRoutes.Add(lstMoreStops); 

我怎樣才能把lstRoutes任何途徑有,比方說,任何參數1的值大於6?

回答

7

最簡單的方法(它可以適用於所有可枚舉,而不是僅僅列出):

lstRoutes = lstRoutes.Where(r => !r.Any(s => s.param1 > 6)).ToList(); 

這將創建一個新的列表,以便複印會發生。最有效的方法是首先將這些項目「添加」到列表中。第二個最有效將從列表本身刪除的項目,而不是構建一個新的:

lstRoutes.RemoveAll(r => r.Any(s => s.param1 > 6)); 
+0

哈我希望能避免在第一步將它們添加到列表中。不幸的是,首發名單是一堆排列,我有任務擺脫無意義的排列。您發佈的代碼的第一位拋出了以下錯誤:無法將lambda表達式轉換爲類型,因爲它不是委託類型。但第二位工作很好。非常感謝你! – 2013-03-23 02:13:38

+0

你知道我怎麼能得到param1的索引嗎?我知道在這種情況下,它總是0,但是說每條路由都由一串整數組成,我想刪除所有在6之前發生的路由。如果不是,則沒有什麼大不了的。我會解決它或開始另一個問題。 – 2013-03-23 03:43:47

+0

想通了。再次感謝你的幫助。 – 2013-03-23 03:57:01

0
List<Stops> stop = lstRoutes.Find(delegate(List<Stops> stp) { return stp.param1 > 6; }); 
+0

非常感謝您的回覆,但我似乎無法得到這個工作。我收到以下錯誤:'System.Collections.Generic.List '不包含'param1'的定義,並且沒有找到接受類型'停止'的第一個參數的擴展方法'param1'。 – 2013-03-23 02:18:02