通过c#中的索引立即删除列表中的项目

本文关键字:删除列 列表 项目 删除 索引 通过 | 更新日期: 2023-09-27 18:00:37

我正在寻找一种立即从列表中删除一组索引的方法。我的意思是,我有一个ex,0,1,5,7的索引列表,我想从动物的字符串列表中删除。我需要一种方法,在一次拍摄中删除指数为0,1,5,7的所有动物。这是因为,如果我遍历动物列表,并在每次迭代时删除0、1、5、7处的动物,则列表结构会发生变化,索引不再适用于更新的动物列表。

感谢

通过c#中的索引立即删除列表中的项目

好吧,一个选项是从最高的开始删除它们。例如:

foreach (var index in indexesToDelete.OrderByDescending(x => x))
{
    list.RemoveAt(index);
}

例如,删除项目5不会影响项目0-4。

除了@Jon Skeet所说的,另一个选项是复制列表,去掉你不想要的项目。

List<string> copy = new List<string>(list.Count - indexesToDelete.Count);
for (int index = 0; index < list.Count; index++)
{
    if (!indexesToDelete.Contains(index))
        copy.Add(list[index]);
}
list = copy;

我并不是说这比乔恩的回答有所改进,只是说这是一个替代方案。我可以想象,在某些场景中,这种方法可能更受欢迎。