3

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

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

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

4

4 回答 4

10

LINQ 不是关于删除东西 - 它是关于查询

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

a.RemoveRange(0, 2);

将只留下“number3”。

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

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

var newList = a.Where((value, index) => index != 2)
               .ToList();
于 2012-09-20T16:21:40.217 回答
3

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

 var indexList = new[] {2};
 var result = a.Where((s, index) => indexList.Contains(index));
于 2012-09-20T16:28:10.637 回答
2

“删除除 X 之外的所有内容”的等效操作是“保留 X”。最简单的方法是在 index 处构造一个包含单个元素的新列表2,如下所示:

a = new List<string>{a[2]};
于 2012-09-20T16:21:28.880 回答
2

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

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

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

a.Where((a1,b1) => b1 == 2).First();
于 2012-09-20T16:30:14.213 回答