Del*_*ate 31 c# lambda dictionary
我不是LINQ解决方案,
我使用简单的谓词来确定是否应该删除密钥,例如,如果字典是构造的Dictionary<int, int>
,那么我应该如何删除所有带有负数据的条目
我更喜欢使用相同的字典,而不是创建新字典,我没有性能问题
有没有办法做到这一点,不使用LINQ,而是使用Lambda表达式?
我不想在LINQ中使用解决方案,因为没有人在我的项目中使用它们,不想成为第一个..但是因为我看到LINQ解决方案看起来更好,我将使用它们..
Jon*_*eet 71
最简单的方法可能是创建一个新的字典,如果这对你没问题:
var newDictionary = oldDictionary.Where(pair => pair.Value >= 0)
.ToDictionary(pair => pair.Key,
pair => pair.Value);
Run Code Online (Sandbox Code Playgroud)
如果你必须改变现有的字典(例如,因为其他几个对象引用了同一个字典),你需要构建一个要删除的键列表,然后删除它们:
var toRemove = dictionary.Where(pair => pair.Value < 0)
.Select(pair => pair.Key)
.ToList();
foreach (var key in toRemove)
{
dictionary.Remove(key);
}
Run Code Online (Sandbox Code Playgroud)
编辑:我刚刚注意到第一句话:"我不是进入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);
}
Run Code Online (Sandbox Code Playgroud)
...但是如果你能使用LINQ,我会鼓励你这样做.我的第二个解决方案相当于"手工"版本,但更具可读性的IMO.
仅使用lambda表达式:
foreach (var i in myDict.Where(d => (d.Value < 0 || d.key <0)).ToList() )
{
myDict.Remove(i.Key);
}
Run Code Online (Sandbox Code Playgroud)
var toRemove = dict.Keys.Where(predicate).ToArray();
foreach (var key in toRemove) {
dict.Remove(key);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
40958 次 |
最近记录: |