Flutter中如何拼接两个列表?已创建自定义模型场景的实现方法
代码修正与列表合并方案
首先修正你现有代码的语法问题,错误点如下:
LocationFacts类构造方法名和类名不匹配,且你定义的属性是title不是content,需要调整构造参数locationData静态方法中的ls变量未提前声明就直接赋值使用
修正后的基础代码:
class LocationFacts{ late int id; late String title; LocationFacts(this.id, this.title); } class Location{ late String name; late List<LocationFacts> facts; Location(this.name, this.facts); static List<Location> locationData() { List<Location> ls = []; ls.add(Location(name: "abc", facts: [ LocationFacts(id: 1, title: "xyz"), LocationFacts(id: 2, title: "qrs"), ])); return ls; } }
两种常见列表合并场景实现
合并两个List<Location>类型的列表
Dart有三种常用合并方式,可根据需求选择:
- 用
+运算符直接生成新的合并列表
List<Location> listA = Location.locationData(); List<Location> listB = [Location(name: "def", facts: [LocationFacts(id:3, title: "mno")])]; List<Location> mergedList = listA + listB;
- 用
addAll方法把第二个列表的元素追加到第一个列表末尾,会修改原listA
listA.addAll(listB);
- 用展开运算符
...合并,适合需要在合并过程中插入其他元素的场景
List<Location> mergedList = [...listA, Location(name: "mid", facts: []), ...listB];
合并两个Location实例下的facts列表
如果需要合并两个地点的事实数据,直接操作facts属性即可,还可以按id实现去重:
Location loc1 = Location(name: "北京", facts: [LocationFacts(id:1, title: "首都")]); Location loc2 = Location(name: "北京", facts: [LocationFacts(id:1, title: "首都"), LocationFacts(id:2, title: "直辖市")]); // 基础合并 List<LocationFacts> mergedFacts = loc1.facts + loc2.facts; // 按id去重合并 List<LocationFacts> uniqueFacts = []; Set<int> addedId = {}; for(var fact in [...loc1.facts, ...loc2.facts]){ if(!addedId.contains(fact.id)){ addedId.add(fact.id); uniqueFacts.add(fact); } }
内容的提问来源于stack exchange,提问作者lixeno1381
相关产品推荐
相关产品推荐

