Dart中如何将Map对象添加到嵌套Map内部的List列表中
Dart实现方案
方案1:直接修改原Map对象(常用最简写法)
直接获取products对应的列表,调用add方法插入新Map即可,建议增加类型校验避免运行时异常:
void main() { // 原有Map对象 var _map = { 'category': 'Africa', 'products': [ { 'countryName': 'Namibia', 'population': 1800000, 'capital': 'Windhoek', }, { 'countryName': 'Kenya', 'population': 20000000, 'capital': 'Nairobi', }, ] }; // 待新增的Map对象 var _newMap = { 'countryName': 'Rwanda', 'population': 3000000, 'capital': 'Kigali', }; // 核心插入逻辑 if (_map['products'] is List) { (_map['products'] as List).add(_newMap); } // 可打印验证结果 print(_map); }
如果是强类型开发场景,提前给Map指定类型可以省略强制转换步骤,写法更简洁:
// 提前指定类型的原有Map Map<String, dynamic> _map = { 'category': 'Africa', 'products': <Map<String, dynamic>>[ { 'countryName': 'Namibia', 'population': 1800000, 'capital': 'Windhoek', }, { 'countryName': 'Kenya', 'population': 20000000, 'capital': 'Nairobi', }, ] }; // 无需强转直接插入 _map['products'].add(_newMap);
方案2:不修改原Map,生成新的Map对象
如果需要保留原始数据不被改动,可以用展开运算符拷贝生成新对象:
var newResultMap = { ..._map, 'products': [ ..._map['products'] as List, _newMap, ] };
该写法不会改动原有_map的内容,适合需要保留原始数据的业务场景。
两种方案运行后得到的结构都和要求的最终结果完全一致。
内容的提问来源于stack exchange,提问作者Okafor Zuruoke
相关产品推荐
相关产品推荐

