c# - 如何使用 lambda 表达式从字典中删除项目

标签 c# dictionary lambda

我不喜欢 LINQ 解决方案,

我正在使用简单的谓词来确定是否应该删除 key , 例如,如果字典的构造类似于 Dictionary<int, int> , 那么我应该如何删除所有带有负面数据的条目

我更喜欢使用相同的字典,而不是创建新的字典, 我没有性能问题

有没有办法不使用 LINQ,而是使用 Lambda 表达式?

我不想要 LINQ 中的解决方案,因为没有人在我的项目中使用它们,不想成为第一个..,但因为我看到 LINQ 解决方案看起来更好,我会使用它们..

最佳答案

最简单的方法可能是创建一个字典,如果这对您来说没问题的话:

var newDictionary = oldDictionary.Where(pair => pair.Value >= 0)
                                 .ToDictionary(pair => pair.Key,
                                               pair => pair.Value);

如果您必须改变现有字典(例如,因为其他几个对象引用了同一个字典),您需要构建一个要删除的键列表,然后再删除它们:

var toRemove = dictionary.Where(pair => pair.Value < 0)
                         .Select(pair => pair.Key)
                         .ToList();

foreach (var key in toRemove)
{
    dictionary.Remove(key);
}

编辑:我刚刚注意到第一句话:“我不喜欢 LINQ 解决方案”。如果这意味着您不想使用 LINQ 解决方案,这里是手动版本:

List<int> toRemove = new List<int>();
foreach (KeyValuePair<int, int> pair in dictionary)
{
    if (pair.Value < 0)
    {
        toRemove.Add(pair.Key);
    }
}

foreach (var key in toRemove)
{
    dictionary.Remove(key);
}

...但是如果您可以使用 LINQ,我鼓励您这样做。我的第二个解决方案相当于“手动”版本,但更具可读性 IMO。

关于c# - 如何使用 lambda 表达式从字典中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5610374/

相关文章:

c# - x86 与 x64 上的 Mod (%) 运算符

python - 获取列表中的字典,其中键为 :value pairs are in another list of dictionaries

python - 覆盖字典 'update'方法

c++ - C++11 中的 C 风格回调

c# - lambda表达式和方法组的区别

c# - 类型推断中需要 "unification"的最简单示例

c# - 将多个 app.config 移动到更全局化的地方

ios - MKMapView - 如何加载所有默认的 Apple 注释

java - 将 python lambda 转换为 scala 或 java。使用 py4j 可以吗?

c# - 将 map 显示为椭圆形