gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 04:08:48 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com