我有一个A类型的对象数组:
A[] ar
。
和整数列表:
List<int> indexes
。
如何使用LINQ从ar
中删除indexes
中包含索引的所有对象?
即我需要一个新的(较小的)数组,而不需要它们的索引在indexes
中的对象。使用LINQ。
剩余对象的顺序是否与删除前的顺序相同?
非常感谢。
答案 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来获得更高的性能