gpt4 book ai didi

algorithm - Dart:总结 map 列表中各项的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 04:40:03 25 4
gpt4 key购买 nike

我试图找出汇总所有相同项目数量的最佳方法是什么,特别是如下所示形成数据:

data = [
{Item Name: Item 2, Quantity: 1},
{Item Name: Item 1, Quantity: 1},
{Item Name: Item 3, Quantity: 1},
{Item Name: Item 2, Quantity: 2},
{Item Name: Item 1, Quantity: 2},
{Item Name: Item 3, Quantity: 2},
];
而我想要实现的是:
totalList = [{Item Name: Item 1, Quantity: 3}, {Item Name: Item 2, Quantity: 3}, {Item Name: Item 3, Quantity: 3}];
我试过使用 tempData 变量来保存元素并比较其余元素,但是,这似乎只将第一个与列表的其余部分进行比较。
var tempData = {};
var totalList = [];
data.forEach((element) {
if (tempData.isEmpty) {
tempData = element;
totalList.add(tempData);
} else {
if (tempData['Item Name'] == element['Item Name']) {
tempData['Quantity'] = tempData['Quantity'] + element['Quantity'];
totalList.add(tempData);
} else {
tempData = {
'Item Name': element['Item Name'],
'Quantity': element['Quantity']
};
totalList.add(tempData);
}
}
});
以上似乎没有给我我想要的输出...
我该怎么办?
感谢您的帮助。

最佳答案

您的数据结构不佳; 'Item Name''Quantity'标签在结构本身中不是很有用,因此我将摆脱它们,创建一个简化的Map<String, int>,将名称直接映射到数量。理想情况下,您可以从那时开始使用简化的结构,但是如果您确实需要显式标签,则可以转换回去。

void main(List<String> args) async {
var data = [
{'Item Name': 'Item 2', 'Quantity': 1},
{'Item Name': 'Item 1', 'Quantity': 1},
{'Item Name': 'Item 3', 'Quantity': 1},
{'Item Name': 'Item 2', 'Quantity': 2},
{'Item Name': 'Item 1', 'Quantity': 2},
{'Item Name': 'Item 3', 'Quantity': 2},
];

// Sum everything into a simpler data structure.
var totalCounts = <String, int>{};
for (var map in data) {
var name = map['Item Name'] as String;
var quantity = map['Quantity'] as int;
totalCounts[name] = (totalCounts[name] ?? 0) + quantity;
}

// Reformat back into the original structure.
var totalList = <Map<String, dynamic>>[
for (var entry in totalCounts.entries)
{'Item Name': entry.key, 'Quantity': entry.value},
];

// Optional: Sort.
totalList.sort((a, b) => a['Item Name'].compareTo(b['Item Name']));

print(totalList); // Prints: [{Item Name: Item 1, Quantity: 3}, {Item Name: Item 2, Quantity: 3}, {Item Name: Item 3, Quantity: 3}]
}
在实际代码中,我还要添加:
const nameLabel = 'Item Name';
const quantityLabel = 'Quantity';
并在各处使用这些字符而不是字符串文字,以减少打字错误的机会。

关于algorithm - Dart:总结 map 列表中各项的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63400987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com