为了账号安全,请及时绑定邮箱和手机立即绑定

MapToDouble 等价于 C# 字典

MapToDouble 等价于 C# 字典

守候你守候我 2022-07-27 10:02:52
去年我熟悉了 Java 中的函数式编程。我现在正在尝试使用 C# 和一个我在 Java 中轻松工作的测试程序。我想将其迁移到 C#,但在使用 Dictionary 以尝试模仿我在 Java 中使用 Map 所做的事情时遇到了障碍。该障碍试图在使用 Hashmap 流时找到与 Java 的 .mapToDouble 函数等效的函数。在java中:stream().mapToDouble(statistics -> getRuntime(statistics)).sum()我将在 C# 中使用什么来获取字典并将对象映射到 double 以便我可以得到它的总和?
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超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 result

var 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,请在评论中告诉我们,因为这必须进行一些重构。


查看完整回答
反对 回复 2022-07-27
?
12345678_0001

TA贡献1802条经验 获得超5个赞

您可以使用 LinqSum()来获取字典项的值的总和:

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


查看完整回答
反对 回复 2022-07-27
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

看起来我的问题的答案是在我的字典上简单地使用 LINQ .sum。我收到了两个这样的答案,但我只能接受其中一个。


为了为我试图做的事情提供更多背景......


beestatData.Data.Where(datum => 

      isWithinDateRange(new DateTime((int)datum.Year, (int)datum.Month, (int)datum.Day), startDate, endDate))

      .Sum(datum => datum.AuxiliaryHeat1/60/60);

我不仅第一次使用 C#,而且还尝试使用 JSON 从我的 Ecobee 恒温器中获取数据。为了以各种方式定制数据,我最终得到了一堆不同的函数,它们可以抓取数据并在循环中对其进行操作。我认为这会变得一团糟,并认为使用函数式编程是可行的方法。


我发现 .Where 大致相当于 Java 中的 .filter,但我怀疑 .Sum 是否与 .mapToDouble.Sum() 相同。我很高兴看到答案很简单,现在我可以轻松地在特定日期内获取系统的总运行时间。


注意:这还没有编译和工作,但我相信这是由于我的代码中的其他内容。


查看完整回答
反对 回复 2022-07-27
  • 3 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号