我有下面的列表以及如何使用LINQ删除指定索引号的所有元素:删除所有元素,除了从给定的索引号
List<string> a = new List<string>();
a.Add("number1");
a.Add("number2");
a.Add("number3");
如何删除所有元素只是除了元件,其索引号= 2使用linq。
我有下面的列表以及如何使用LINQ删除指定索引号的所有元素:删除所有元素,除了从给定的索引号
List<string> a = new List<string>();
a.Add("number1");
a.Add("number2");
a.Add("number3");
如何删除所有元素只是除了元件,其索引号= 2使用linq。
LINQ是不是删除的东西 - 这是关于查询。
您可以致电RemoveRange
从列表中删除一系列项目。所以:
a.RemoveRange(0, 2);
只会留下“number3”。
或者您可以根据dasblinkenlight的答案创建一个新列表。如果您可以告诉我们更多关于您想要实现的目标以及为什么您认为LINQ是解决方案,我们可能会为您提供更多帮助。
编辑:好的,现在我们有了更清晰的要求,你可以使用LINQ:
var newList = a.Where((value, index) => index != 2)
.ToList();
好sablinkenlights答案是我寻找的,我正在寻找简单的方法。我正在考虑选择索引号不相等的元素。例如:我不想选择索引号为2的元素,我想选择索引号为1和3的元素。但是你是对的,linq不是关于删除。 –
@MichaelRiva:所以你不*实际试图从列表中删除元素?你正在创建一个新的列表?清楚这些事情很重要。而且这听起来像你试图滤除元素2,而不是过滤掉所有*但是元素2?你很*不清楚...... –
+1乔恩处理OP的_clarity_。 :) –
“除X以外的所有东西”的等效操作是“保留X”。最简单的方式做到这一点是在指数2
用一个单一的元素构建一个新的列表,像这样:
a = new List<string>{a[2]};
呃我怎么会这么认为 –
假设你有你想保留,您可以使用Where
与index
过滤索引列表:
var indexList = new[] {2};
var result = a.Where((s, index) => indexList.Contains(index));
哇很好的回答 –
var result = a.Where((s,index)=> index == 2);'更简单,但你需要在任何一个之后添加“ToList()”的调用。 – dasblinkenlight
虽然@ dasblinkenlight的答案是更好的选择,这里是LINQ(或至少一个迭代)
a.Where((item,index) => b1 == 2);
或返回单个字符串对象,而不是的IEnumberable
a.Where((a1,b1) => b1 == 2).First();
可能的复制[C# - 列表 - 删除所有的元素,但不是前四个(http://stackoverflow.com/questions/ 10531284/c-sharp-list-remove-all-elements-but-not-the-first-4) – iceDragon