Dart/Flutter: 如何计算包含相同键的多个映射的值?

Dart/Flutter: How can i calculate values of multiple maps which contains same key?

我是 Dart 的新手,我被困在这一点上好几天了。

我有多个地图,这些地图遵循相同的模式 (date:value),但它们的长度不同。而且这些贴图是动态增加的。

例如:

Map1:{01.01.2021:2,02.01.2021:5,03.01.2021:3}, 
Map2:{02.01.2021:10,03.01.2021:4,04.01.2021:8}, 
Map3...
Map4...
...

我想合并这些映射并对包含相同键的值求和并将其存储在另一个映射中。对于不同的key,不会进行计算,直接存储。

地图 1 和地图 2 的结果:

Combined Map{01.01.2021:2,02.01.2021:(5+3),03.01.2021:(3+4),04.01.2021:8}

考虑到这些映射在 class 或另一个列表中是可迭代的,我该如何执行这样的操作。

提前致谢。

给你!将此粘贴到 DartPad

这将适用于 data map

中的任意数量的地图

任何问题都可以在评论中问我。

void main() {
  
  final data = {
    'Map1': {'01.01.2021':2,'02.01.2021':5,'03.01.2021':3}, 
    'Map2': {'02.01.2021':10,'03.01.2021':4,'04.01.2021':8}, 
  };

  final finalData = {};
  
  for(final key in data.keys) {
    for(final date in data[key]!.keys) {
      final initialValue = finalData[date];
      
      if(initialValue == null) {
        finalData[date] = data[key]![date];
      } else {
        finalData[date] = initialValue + data[key]![date];
      }
    }
  }
  // {01.01.2021: 2, 02.01.2021: 15, 03.01.2021: 7, 04.01.2021: 8}
  print(finalData);
}

内部循环可以使用三级运算符写得更简洁

for (final date in data[key]!.keys) {
  final initialValue = finalData[date];
  finalData[date] = initialValue == null
      ? data[key]![date]
      : initialValue + data[key]![date];
}

或 null 感知运算符 (??)

for (final date in data[key]!.keys) {
  finalData[date] = data[key]![date]! + (finalData[date] ?? 0);
}