dart 为什么flutter贴图的addAll()函数在循环中会覆盖值?

ws51t4hk  于 2022-12-16  发布在  Flutter
关注(0)|答案(2)|浏览(204)

密码是这样的:

Map<String, Object> _ordini = {};
    
//widget._ordini is a List<Map>
widget._ordini.forEach((element) {
_ordini.addAll(element);
});
print(_ordini);

in _orders我将只找到最后一个元素。我还尝试了:

Map<String, Object> _ordini = {};
    
  //widget._ordini is a List<Map>
  widget._ordini.forEach((element) {
  Map<String, Object> _temp = {};
 _temp.addAll(element);
_ordini.addAll(_temp);
 });
    
print(_ordini);

但问题仍然存在。

wqnecbli

wqnecbli1#

正如@OMiShah提到的:
如果其他键已存在于此Map中,则其值将被覆盖
但你可以做的一件事是像这样对这些值求和:
假设这是您的:

List<Map<String, int>> ordini = [
      {
        "String1": 1,
      },
      {
        "String1": 2,
      },
      {
        "String3": 3,
      }
    ];

你可以试试这个:

ordini.forEach((element) {
  element.entries.forEach((e) {
    if (_ordini.containsKey(e.key)) {
      _ordini[e.key] = _ordini[e.key]! + e.value;
    } else {
      _ordini[e.key] = e.value;
    }
  });
});

 print(_ordini); //{String1: 3, String3: 3}

这只是一个示例,给予您了解如何解决该问题。

rhfm7lfc

rhfm7lfc2#

这是你问题的答案。
addAll()意味着它将在某个时刻从列表中删除所有内容并添加所有新元素。
因此,如果您希望逐个添加,则可以使用.addEntries({})

相关问题