我开始使用 C# 并获得了以下课程:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想用 lambda 表达式缩短代码的以下部分:
foreach (String key in base.Keys) {
if (key.StartsWith(prefix)) {
sum = sum + base[key];
}
}
Run Code Online (Sandbox Code Playgroud)
我试过:
new List<String>(base.Keys).ForEach(key => key.StartsWith(prefix) ? sum = sum + base[key] : sum = sum);
Run Code Online (Sandbox Code Playgroud)
我来自 Java,我不太明白为什么它不起作用。谁能解释我应该以不同的方式做些什么(以及为什么)?
这仅在过滤后至少有一个元素时才有效。
base.Keys
.Where(key=> key.StartsWith(prefix))
.Sum(base[key])
Run Code Online (Sandbox Code Playgroud)
如果可以没有(该方法不能求和),您可以使用它,DefaultIfEmpty
因此您的总和为 0。
base.Keys
.Where(key=> key.StartsWith(prefix))
.Select(key=> base[key])
.DefaultIfEmpty(0)
.Sum()
Run Code Online (Sandbox Code Playgroud)
出于性能原因,您可能希望避免使用索引器,而是自己迭代字典。
var defaultZero = new KeyValuePair<string, int>(string.Empty, 0);
var sum = this
.Where(pair => pair.Key.StartsWith(prefix))
.DefaultIfEmpty(defaultZero)
.Sum(pair => pair.Value);
Run Code Online (Sandbox Code Playgroud)
如果您需要单独处理没有元素的情况,您可以执行以下操作
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
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
191 次 |
最近记录: |