我不喜欢 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/