我有以下列表,如何从linq中删除给定索引号的所有元素:
List<string> a = new List<string>();
a.Add("number1");
a.Add("number2");
a.Add("number3");
如何使用linq删除除索引号= 2的元素之外的所有元素。
答案 0 :(得分:10)
LINQ不是关于删除事情 - 它是关于查询。
您可以调用RemoveRange
从列表中删除一系列项目。所以:
a.RemoveRange(0, 2);
只留下“number3”。
或者您可以根据dasblinkenlight的答案创建一个新列表。如果您可以告诉我们更多关于您要实现的目标以及您认为LINQ是解决方案的原因,我们可以为您提供更多帮助。
编辑:好的,现在我们有更明确的要求,你可以使用LINQ:
var newList = a.Where((value, index) => index != 2)
.ToList();
答案 1 :(得分:3)
假设您有要保留的索引列表,可以使用Where
与index
进行过滤:
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();