最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
C# 从 List<T> 移除空元素的优化例子
时间:2022-06-25 07:59:47 编辑:袖梨 来源:一聚教程网
代码评审中偶尔会发现一些通用的性能问题,在此作记录分享。
需求
我们有时候需要延迟删除 List
优化前
static void RemoveNull
for (int i = list.Count - 1; i >= 0; i--)
if (list[i] == null)
list.RemoveAt(i); // O(n)
}
由于 RemoveAt() 是 时间的操作,整个函数是 。但这个问题只需要 时间。
优化后
只要把第一个空元素之后的非空元素往前移,就能实现。
static void RemoveNull
// 找出第一个空元素 O(n)
int count = list.Count;
for (int i = 0; i < count; i++)
if (list[i] == null) {
// 记录当前位置
int newCount = i++;
// 对每个非空元素,复制至当前位置 O(n)
for (; i < count; i++)
if (list[i] != null)
list[newCount++] = list[i];
// 移除多余的元素 O(n)
list.RemoveRange(newCount, count - newCount);
break;
}
}
List
C++ 可用 std::remove, std::remove_if,因为支持内联不需考虑调用成本。
相关文章
- 我的世界附魔等级上限怎么修改指南 高等级武器附魔教程 04-27
- 我的世界蜜蜂怎么养殖 蜂蜜获取途径一览 04-27
- 开放空间琳怎么培养 开放空间琳泽西培养攻略大全 04-27
- 我的世界基础物品合成大全 实用道具制作指南 04-27
- 我的世界瞬间伤害药水怎么制作 强力战斗药水配方介绍 04-27
- 开放空间诗怎么培养 开放空间诗歌爱瑠培养攻略大全 04-27