2012-09-20 111 views
3

我有下面的列表以及如何使用LINQ刪除指定索引號的所有元素:刪除所有元素,除了從給定的索引號

List<string> a = new List<string>(); 
     a.Add("number1"); 
     a.Add("number2"); 
     a.Add("number3"); 

如何刪除所有元素只是除了元件,其索引號= 2使用linq。

+0

可能的複製[C# - 列表 - 刪除所有的元素,但不是前四個(http://stackoverflow.com/questions/ 10531284/c-sharp-list-remove-all-elements-but-not-the-first-4) – iceDragon

回答

9

LINQ是不是刪除的東西 - 這是關於查詢

您可以致電RemoveRange從列表中刪除一系列項目。所以:

a.RemoveRange(0, 2); 

只會留下「number3」。

或者您可以根據dasblinkenlight的答案創建一個新列表。如果您可以告訴我們更多關於您想要實現的目標以及爲什麼您認爲LINQ是解決方案,我們可能會爲您提供更多幫助。

編輯:好的,現在我們有了更清晰的要求,你可以使用LINQ:

var newList = a.Where((value, index) => index != 2) 
       .ToList(); 
+0

好sablinkenlights答案是我尋找的,我正在尋找簡單的方法。我正在考慮選擇索引號不相等的元素。例如:我不想選擇索引號爲2的元素,我想選擇索引號爲1和3的元素。但是你是對的,linq不是關於刪除。 –

+3

@MichaelRiva:所以你不*實際試圖從列表中刪除元素?你正在創建一個新的列表?清楚這些事情很重要。而且這聽起來像你試圖濾除元素2,而不是過濾掉所有*但是元素2?你很*不清楚...... –

+0

+1喬恩處理OP的_clarity_。 :) –

2

「除X以外的所有東西」的等效操作是「保留X」。最簡單的方式做到這一點是在指數2用一個單一的元素構建一個新的列表,像這樣:

a = new List<string>{a[2]}; 
+0

呃我怎麼會這麼認爲 –

3

假設你有你想保留,您可以使用Whereindex過濾索引列表:

var indexList = new[] {2}; 
var result = a.Where((s, index) => indexList.Contains(index)); 
+0

哇很好的回答 –

+0

var result = a.Where((s,index)=> index == 2);'更簡單,但你需要在任何一個之後添加「ToList()」的調用。 – dasblinkenlight

2

雖然@ dasblinkenlight的答案是更好的選擇,這裏是LINQ(或至少一個迭代)

a.Where((item,index) => b1 == 2); 

或返回單個字符串對象,而不是的IEnumberable

a.Where((a1,b1) => b1 == 2).First();