【问题标题】:Dart: Map class, reduce (or otherwise find certain information)Dart:映射类,reduce(或以其他方式查找某些信息)
【发布时间】:2019-07-23 01:11:58
【问题描述】:

Dart (Flutter) 新手,文档似乎没有 Map 类的方法可以让我轻松做到这一点...

我想要一个包含 Datetime 键和所吃卡路里值的 Map。

{'2019-07xxx': 350, '2019-07xxx': 500, ...}

现在,最好的过滤方法是什么,以便我只获取今天的值? (即启动应用程序并从存储中提取数据时)

理想情况下,一旦我这样做了,我可以通过以下方式获得今天卡路里的累积值:

var sum = todaysCaloriesArray.reduce((a, b) => a + b);

除非有一些 Dart-fu 可以更好地实现这一点?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    第一个答案很棒!但是您可以使用fold 方法,以便在空集合中使用。

    var map = Map<String, int>();
    var sum = map.entries
      .where((e) => e.key.startsWith('2019-07-22'))
      .fold(0,(int a, b) => a + b.value);
    

    【讨论】:

    • 这让我可以浏览对象列表并通过“where”选择轻松地对它们求和,reduce 在哪里抛出 null,因为某些对象与 where 选择不匹配。
    【解决方案2】:

    您可以在地图的entries 上使用.where。例如:

      var map = Map<String, int>();
      var sum = map.entries
          .where((e) => e.key.startsWith('2019-07-22'))
          .map<int>((e) => e.value)
          .reduce((a, b) => a + b);
    

    【讨论】:

    • 完美。你是人类的礼物。我所要做的就是将 e.key 更改为 e.key.toString(),因为它是日期时间。祝你有美好的一天!
    猜你喜欢
    • 2020-08-06
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    相关资源
    最近更新 更多