gpt4 book ai didi

C# 将 foreach 循环格式化为 Lambda

转载 作者:行者123 更新时间:2023-12-01 16:15:00 25 4
gpt4 key购买 nike

我正在开始使用 C# 并获得以下类(class):

using System;
using System.Collections.Generic;

class PrefixMapSum : Dictionary<String, int> {

public bool insert(String key, int value) {
return base.TryAdd(key, value);
}

public int sum(String prefix) {
int sum = 0;

foreach (String key in base.Keys) {
if (key.StartsWith(prefix)) {
sum = sum + base[key];
}
}

return sum;
}
}

现在我想用 lambda 表达式来缩短以下代码部分:

        foreach (String key in base.Keys) {
if (key.StartsWith(prefix)) {
sum = sum + base[key];
}
}

我尝试过:

new List<String>(base.Keys).ForEach(key => key.StartsWith(prefix) ? sum = sum + base[key] : sum = sum);

但是我遇到了这个错误:CS0201

我来自 Java,我不太明白为什么它不起作用。谁能解释我应该采取什么不同的做法(以及为什么)?

最佳答案

只有当过滤后至少有一个元素时,此功能才会起作用。

base.Keys
.Where(key=> key.StartsWith(prefix))
.Sum(base[key])

如果没有(该方法无法求和),您可以使用此DefaultIfEmpty这样您的总和将为0。

base.Keys
.Where(key=> key.StartsWith(prefix))
.Select(key=> base[key])
.DefaultIfEmpty(0)
.Sum()

出于性能原因,您可能希望避免使用索引器,并自己迭代字典。

var defaultZero = new KeyValuePair<string, int>(string.Empty, 0);
var sum = this
.Where(pair => pair.Key.StartsWith(prefix))
.DefaultIfEmpty(defaultZero)
.Sum(pair => pair.Value);

如果您需要单独处理没有元素的情况,您可以执行类似的操作

var elements =this
.Where(pair => pair.Key.StartsWith(prefix))
.Select(x=>x.Value);
if(!elements.Any()){
// your logic here
}else{
sum= elements.Sum();
// other stuff
}

关于C# 将 foreach 循环格式化为 Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60054651/

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