如何使用LINQ从数组中删除对象

时间:2017-07-16 09:49:11

标签: .net arrays linq

我有一个A类型的对象数组: A[] ar。 和整数列表: List<int> indexes

如何使用LINQ从ar中删除indexes中包含索引的所有对象? 即我需要一个新的(较小的)数组,而不需要它们的索引在indexes中的对象。使用LINQ。

剩余对象的顺序是否与删除前的顺序相同?

非常感谢。

2 个答案:

答案 0 :(得分:2)

您不能仅修改数组中包含的元素。

但您可以轻松创建替换阵列:

myArray = myArray.Where(x => x.KeepThisElement).ToArray();

使用LINQ to Objects(在这种情况下你将使用它),在Where的重载中将当前索引传递给谓词:

myArray = myArray.Where((x, idx) => !indexes.Conatins(idx)).ToArray();

答案 1 :(得分:1)

这可能看起来很奇怪,但它可以做你想要的(它不是LINQ):

var filtered = new List<A>();
for (var i = 0; i < ar.Length; i++)
{
    if (indexes.Contains(i))
        continue;

    filtered.Add(ar[i]]);
}

var ar = filtered.ToArray();

如果您的整数列表非常大,请考虑使用HashSet<int>代替list来获得更高的性能