MapToDouble与C#字典等效

时间:2019-03-10 17:01:14

标签: java c#

去年,我对Java中的函数式编程非常熟悉。我现在正在尝试使用我已经在Java中轻松工作过的测试程序来使用C#。我想将其迁移到C#,并且在使用Dictionary尝试模仿我在Java中使用Map所做的工作时遇到了障碍。

在使用Hashmap流时,该障碍正试图找到与Java的.mapToDouble函数等效的对象。

在Java中:

stream().mapToDouble(statistics -> getRuntime(statistics)).sum()

在C#中,我该如何使用字典来将一个对象映射到一个double以便可以求和?

2 个答案:

答案 0 :(得分:0)

您可以使用Linq Sum()来获取字典项的值之和:

double sum = dict.Sum(d => d.Value);

Live Demo

答案 1 :(得分:0)

根据您的描述,您似乎拥有一个包含某个键TKey和一个值为object的字典。

var sampleDictionary = new Dictionary<TKey, object>();
... populate dictionary ...

我们并不真正在乎按键。如果您的object实例类型可转换为double,那么您可以做几件事:

// Perform a LINQ operation on the `Values` collection of the dictionary:
var sum = sampleDictionary.Values.Select(v => Convert.ToDouble(v)).Sum();

// Perform a LINQ operation directly on the dictionary
// Use this is if you might potentially need to incorporate TKey into your result
var sum = sampleDictionary.Select(d => Convert.ToDouble(d.Value)).Sum();

如果您愿意,也可以将lambda移至.Sum()函数中,以缩短它:

var sum = sampleDictionary.Values.Sum(v => Convert.ToDouble(v));

var sum = sampleDictionary.Sum(d => Convert.ToDouble(d.Value));

这里没有一种方法真的比另一种方法更好,只要选择一种现在可以使用并且在您的应用程序上下文中有意义的方法即可。

如果您的objects可能无法转换为double,请在评论中告知我们,因为这需要进行一些重构。