You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:45:01