删除除给定索引号之外的所有元素

时间:2012-09-20 16:19:27

标签: c# linq

我有以下列表,如何从linq中删除给定索引号的所有元素:

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

如何使用linq删除除索引号= 2的元素之外的所有元素。

4 个答案:

答案 0 :(得分:10)

LINQ不是关于删除事情 - 它是关于查询

您可以调用RemoveRange从列表中删除一系列项目。所以:

a.RemoveRange(0, 2);

只留下“number3”。

或者您可以根据dasblinkenlight的答案创建一个新列表。如果您可以告诉我们更多关于您要实现的目标以及您认为LINQ是解决方案的原因,我们可以为您提供更多帮助。

编辑:好的,现在我们有更明确的要求,你可以使用LINQ:

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

答案 1 :(得分:3)

假设您有要保留的索引列表,可以使用Whereindex进行过滤:

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

答案 2 :(得分:2)

“删除X以外的所有内容”的等效操作是“保持X”。最简单的方法是使用索引2的单个元素构建一个新列表,如下所示:

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

答案 3 :(得分:2)

虽然@ dasblinkenlight的答案是更好的选择,但这里是linq(或至少一次迭代)

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

或返回单个字符串对象而不是IEnumberable

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