我只是想从我正在执行的特定自定义对象列表中添加值,如下所示:
private int CountChances()
{
int totalChance = 0;
foreach(var chance in this.Chances)
{
totalChance += chance.Value;
}
return totalChance;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有foreach循环的情况下更快地完成这项工作?我几乎可以肯定linq应该能够快速完成这项工作,但我似乎无法找到如何做到这一点.
你可以随时做:
var sum = this.Chances.Sum(c => c.Value);
Run Code Online (Sandbox Code Playgroud)
这是更短更清晰的编码器.但是,性能方面,foreach可能同样快或甚至更快.
但请注意,Sum使用checked模式的实现也会影响性能,因此如果您的代码非常关键,那么foreach肯定会更快.
但是,我们正在谈论非常快速的代码,如果Chance是这样的话
class Chance {
public long Value {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
我们有1000万件物品清单
var chances = Enumerable.Range(0, 10000000).Select(i => new Chance{Value = i});
Run Code Online (Sandbox Code Playgroud)
在我的机器上,我得到780毫秒foreach,而1030毫秒Sum.因此,如果您的代码无法接近百万范围,那么您将使用Sum进行设置,因为代码更加明显.
即,因为你的方法被命名CountChances,支持开发人员可能会误认为它的功能,因为一眼就看出它实际上总结机会并不明显.这种Sum方法没有这样的机会.
你可以这样做:
this.Chances.Sum(e => e.Value);
Run Code Online (Sandbox Code Playgroud)
只需包括:
using System.Linq;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |