Dart:映射类,减少(或以其他方式查找某些信息)

Mat*_*kao 4 dart flutter

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

我想要一个带有日期时间键和所吃卡路里值的地图。

{'2019-07xxx': 350, '2019-07xxx': 500, ...}
Run Code Online (Sandbox Code Playgroud)

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

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

var sum = todaysCaloriesArray.reduce((a, b) => a + b);
Run Code Online (Sandbox Code Playgroud)

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

Ric*_*eap 9

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

  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);
Run Code Online (Sandbox Code Playgroud)


小智 6

第一个答案很棒!但您可以使用该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);
Run Code Online (Sandbox Code Playgroud)