如何从 Dart 中的地图列表中获取统计摘要?

How get a statistical summary from List of Maps in Dart?

使用以下地图列表,我想创建一种统计摘要,以便能够从中创建绘图。

    List<dynamic> data = [
  {
    "SoftwareVersion": "10.09.21",
    "Controller": "P1",
  },
  {
    "SoftwareVersion": "11.11.03",
    "Controller": "P1",
  },
  {
    "SoftwareVersion": "11.11.03",
    "Controller": "P2",
  },
  {
    "SoftwareVersion": "28.09.04",
    "Controller": "P2",
  },
  {
    "SoftwareVersion": "28.09.04",
    "Controller": "P2",
  },
  {  
    "SoftwareVersion": "28.09.04",
    "Controller": "P3",  
  }];

上面列表的预期结果应该类似于下面的列表。因此,对于每个可用的控制器,我都会得到实际使用的软件版本的计数。

List newData = [
{
  "P1": {
    "10.09.21": 1,
    "11.11.03": 1,
    },
  "P2": {
    "11.11.03": 1,
    "28.09.04": 2
    },
  "P3": {
    "28.09.04": 1
    } 
}];

只需遍历添加到 newData 地图的列表。如果以前没有看到此控制器或版本,请小心添加一个空值 - 为此使用方便的 putIfAbsent。 (请注意,我从 newData 中删除了不必要的外部列表);

void main() {
  data.forEach(addToNewData);
  print(newData);
}

void addToNewData(Map<String, String> e) {
  final version = e['SoftwareVersion']!;
  final controller = e['Controller']!;
  final controllerMap = newData.putIfAbsent(controller, () => <String, int>{});
  controllerMap[version] = controllerMap.putIfAbsent(version, () => 0) + 1;
}

final newData = <String, Map<String, int>>{};