首页 >后端开发 >C++ >如何在迭代时从通用列表中安全地删除元素?

如何在迭代时从通用列表中安全地删除元素?

Barbara Streisand
Barbara Streisand原创
2025-01-31 01:46:09666浏览

How to Safely Remove Elements from a Generic List While Iterating?

迭代过程中安全移除泛型列表元素

在许多编程场景中,需要处理列表中的元素。然而,如果在此过程中需要移除某些元素,标准方法可能会出现问题。

foreach循环中使用.Remove(element)会引发异常,而递减计数器并使用.RemoveAt(i)则会破坏当前集合位置。

更优雅的解决方案是反向迭代列表:

<code class="language-csharp">for (int i = safePendingList.Count - 1; i >= 0; i--)
{
    // 处理元素

    // 如需移除元素
    // safePendingList.RemoveAt(i);
}</code>

这确保了移除元素不会影响列表中的当前位置。

或者,RemoveAll方法允许根据谓词过滤掉元素:

<code class="language-csharp">safePendingList.RemoveAll(item => item.Value == someValue);</code>

以下示例演示了for循环方法的用法:

<code class="language-csharp">var list = new List<int>(Enumerable.Range(1, 10));
Console.WriteLine("Before:");
list.ForEach(i => Console.WriteLine(i));
list.RemoveAll(i => i > 5);
Console.WriteLine("After:");
list.ForEach(i => Console.WriteLine(i));</code>

输出:

<code>Before:
1
2
3
4
5
6
7
8
9
10
After:
1
2
3
4
5</code>

以上是如何在迭代时从通用列表中安全地删除元素?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn