繁体   English   中英

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

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

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

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

例如:

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...
...

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

Map1 和 Map2 的结果:

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);
}

@pedropimont首先,我怎样才能将这些地图(Map1,Map2 .....)动态地放入您手动执行的“数据”中?

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}, 
  };

第二个问题是,实际上我想做的是在图表中使用这些值。 为此,我需要计算百分比,而不是像我在上一个问题中提到的那样对值求和。

例如; 每个地图都在 class 内,在 class 内,每个 map 都有一个金额值。

对于'Map1': {'01.01.2021':2,'02.01.2021':5,'03.01.2021':3} ,-> 2、5 和 3 值是百分比。 还有一个变量,例如Map1Amount= 1000€

对于'Map2': {'02.01.2021':10,'03.01.2021':4,'04.01.2021':8} ,-> 10、4 和 8 值是百分比。 还有一个变量,例如Map2Amount= 2000€

所以最后在您指定的迭代期间,我需要进行以下计算;

每个日期;

((Map1Amount*Map1[date])+(Map2Amount*Map2[date]))*100/(Map1Amount+Map2Amount)

例如日期=02.01.2021;

((1000*5)+(2000*10))*100/(1000+2000)

对于不同的密钥,同样不会进行计算和存储。

再次感谢你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM