如何从 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>>{};
使用以下地图列表,我想创建一种统计摘要,以便能够从中创建绘图。
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>>{};