我正在寻找一种从AT ONCE列表中删除一组索引的方法。我的意思是,我有一个ex,0,1,5,7的索引列表,我想从动物的字符串列表中删除。我需要一种方法来一次性删除指数0,1,5,7中的所有动物。这是因为如果我遍历动物列表并在每次迭代时删除动物0,1,5,7,则列表结构会发生变化,并且不再适用于更新的动物列表。
由于
答案 0 :(得分:7)
嗯,一个选项是删除它们从最高的开始。例如:
foreach (var index in indexesToDelete.OrderByDescending(x => x))
{
list.RemoveAt(index);
}
例如,删除第5项不会影响项目0-4。
答案 1 :(得分:1)
除了@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;
我并不是说这是对Jon的答案的改进,只是它是另一种选择。我可以想象一下这种方法可能是首选的场景。