是否可以将不存在的项目插入到map中,否则增加其在dart/flutter中的出现次数?



我有一个购物车控制器在dart/flutter与GetX statemanager。我有两个不同的数组,里面有相同的元素。当产品添加到购物车时,我想首先检查该产品是否存在于地图中。如果是,则增加其出现次数,否则增加其出现次数。问题是,这只适用于每个产品单独数组。

E。g Array1 ->将Array1中的项目添加到购物车中。

Array2→将Array2中的项目添加到购物车中。

Array1 Array2包含相同的物品,

现在,如果我想向购物车中添加一个已经由另一个数组添加的产品,它将作为一个新条目添加,而不是增加其出现次数。

代码:

Product product1 = Product(id: 1, title: 'title - 1');
Product product2 = Product(id: 1, title: 'title - 1');
int count = 0;
while (count < 10) {
addToMap(product1);
addToMap(product2);
count++;
}
addToMap(Product product) {
if (hashMap.containsKey(product)) {
hashMap[product] += 1;
} else {
hashMap[product] = 1;
}
}
hashMap.forEach((key, value) {
print('key is ${key.title} and value is ${value}');
});

输出:

key is title - 1 and value is 10
key is title - 1 and value is 10

预期输出应该如下

key is title - 1 and value is 20

hashMap的问题是关键。Product1和product2是两个不同的实例,这意味着两个不同的键。与其使用整个类,不如尝试只使用id。它应该看起来像这样:

addToMap(Product product) {
if (hashMap.containsKey(product.id)) {
hashMap[product.id] += 1;
} else {
hashMap[product.id] = 1;
}
}

这样,即使实例不同,id也会相同。

正确的解决方法如下:

@Razvan建议的。我确实用过这个产品。Id作为哈希映射中的键。这个解决方案工作得很好,但是如果你像我一样,希望能够从hashmap中的int中提取对象。你必须使用列表。该列表只保存每个项目一次。hashmap跟踪一个项目被添加到列表中的次数。如果你想计算价格,例如,在哈希映射上使用一个简单的循环,并将价格乘以数量。

Map hashMap = HashMap<int, int>();
List<T> products = <T>();
//calculate price for a item
hashMap.forEach((key, value) {
print('Key is $key and value is $value');
for (var element in products) {
print('Price is ${element.price * value}');
}
});
addToMap(Product product) {
if (hashMap.containsKey(product.id)) {
hashMap[product.id] += 1;
} else {
products.add(product)
hashMap[product.id] = 1;
}

最新更新