我有以下代码:
foreach (var bar in dataFromDataFeed.Where(bar => bar.Key < fromTicks
|| bar.Key > toTicks))
{
dataFromDataFeed.Remove(bar.Key);
}
这是安全的还是我需要在 foreach 内转换 IEnumerable?到 Dictionary<T,U>第一?
谢谢。
请您参考如下方法:
不,那会炸毁或得到一个仍然有坏元素的结果。只需反转 Where 表达式:
var filtered = dataFromDataFeed.Where(bar => bar.Key >= fromTicks && bar.Key <= toTicks);
dataFromFeed = filtered.ToList(); // optional
不清楚你是否真的需要更新列表,通常没有必要,因为你有一个非常好的枚举器,所以最后一个语句是//可选。
请记住,像在原始代码中那样使用 Remove() 具有 O(n*m) 复杂度,非常不好。使用 ToList() 只是 O(m),但需要 O(m) 存储。用速度换取内存是一个常见的程序员决定,但这是一个灌篮高手,除非 m 很大(数亿,你正在与 OOM 作斗争)或非常小。鉴于表达式,两者都不适用。
