猿问

MapToDouble 等价于 C# 字典

去年我熟悉了 Java 中的函数式编程。我现在正在尝试使用 C# 和一个我在 Java 中轻松工作的测试程序。我想将其迁移到 C#,但在使用 Dictionary 以尝试模仿我在 Java 中使用 Map 所做的事情时遇到了障碍。

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

在java中:

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

我将在 C# 中使用什么来获取字典并将对象映射到 double 以便我可以得到它的总和?


守候你守候我
浏览 146回答 3
3回答

子衿沉夜

根据您的描述,您似乎有一个包含某个键TKey和一个值的字典object。var sampleDictionary = new Dictionary<TKey, object>();... populate dictionary ...我们并不真正关心密钥。如果您的object实例类型可转换为doubles,那么您可以做一些不同的事情:// 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 resultvar sum = sampleDictionary.Select(d => Convert.ToDouble(d.Value)).Sum();.Sum()如果愿意,您还可以将 lambda 移入函数中,以缩短它:var sum = sampleDictionary.Values.Sum(v => Convert.ToDouble(v));或者var sum = sampleDictionary.Sum(d => Convert.ToDouble(d.Value));这里没有一种方法真的比另一种更好,只需选择一种现在可以工作并且在您的应用程序上下文中有意义的方法。如果您objects可能无法转换为double,请在评论中告诉我们,因为这必须进行一些重构。

12345678_0001

您可以使用 LinqSum()来获取字典项的值的总和:double&nbsp;sum&nbsp;=&nbsp;dict.Sum(d&nbsp;=>&nbsp;d.Value);

料青山看我应如是

看起来我的问题的答案是在我的字典上简单地使用 LINQ .sum。我收到了两个这样的答案,但我只能接受其中一个。为了为我试图做的事情提供更多背景......beestatData.Data.Where(datum =>&nbsp;&nbsp; &nbsp; &nbsp; isWithinDateRange(new DateTime((int)datum.Year, (int)datum.Month, (int)datum.Day), startDate, endDate))&nbsp; &nbsp; &nbsp; .Sum(datum => datum.AuxiliaryHeat1/60/60);我不仅第一次使用 C#,而且还尝试使用 JSON 从我的 Ecobee 恒温器中获取数据。为了以各种方式定制数据,我最终得到了一堆不同的函数,它们可以抓取数据并在循环中对其进行操作。我认为这会变得一团糟,并认为使用函数式编程是可行的方法。我发现 .Where 大致相当于 Java 中的 .filter,但我怀疑 .Sum 是否与 .mapToDouble.Sum() 相同。我很高兴看到答案很简单,现在我可以轻松地在特定日期内获取系统的总运行时间。注意:这还没有编译和工作,但我相信这是由于我的代码中的其他内容。
随时随地看视频慕课网APP

相关分类

Java
我要回答