c# - 删除 List<T> 中的备用元素

标签 c# generics collections

删除 List<T> 中的备用(奇数索引或偶数索引)元素的最有效方法是什么?不使用占位符列表变量?

此外,如果您能在每个答案中提及费用,我们将不胜感激。

我正在寻找一种有效的方法来做到这一点

提前致谢

最佳答案

如果您为删除的每个项目调用 RemoveAt,您将移动大量数据。最有效的方法是将要保留的项目移动到一起,然后在最后删除未使用的项目:

int pos = 0;
for (int i = 0; i < values.Count; i += 2, pos++) {
    values[pos] = values[i];
}
values.RemoveRange(pos, values.Count - pos);

编辑:
此方法将在 15 毫秒内处理一百万个整数的列表。使用 RemoveAt 将花费三分钟多...

编辑2:
您实际上可以从 pos=1 和 i=2(或 3)开始,因为不必将第一项复制到自身。不过,这会使代码不那么明显。

关于c# - 删除 List<T> 中的备用元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/621813/

相关文章:

c# - 有没有办法告诉我在运行时使用的是哪个枚举?

java - 了解 Java 中泛型的语法

java - 无法通过引用方法传递元素来将元素添加到集合中

c# 按值而不是键对 StringDictionary 进行排序

c# - 如何将 List<Object> 传递给 WCF

list - 通用列表的推土机映射

java - 抽象数据类型命名约定 : (Dynamic) Array, Vector、Sequence、List、Container、Buffer

java - Google Guava "harder"是否比 Apache Collections 更有用?

c# - 统一: Reading and updating from large CSV file

c# - MVVM 解决方案结构