因此,我尝试过滤包含一些对象的普通列表。在这些对象中是一个ID,仅应显示一次。我的问题是,这不起作用。
当我尝试仅输出单个ID时,它可以工作:

List container = [];

haltepunkte.forEach((element) {
  if (!container.contains(element["LineID"])) {
    print(element['LineID']);
    container.add(element);
  }
});
当我在容器上调用print时,这再次输出了我的整个列表。
[{StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 101}, {StopID: 130, StopText: Seegasse, LineID: 136}, {StopID: 130, StopText: Seegasse, LineID: 136}, {StopID: 130, StopText: Seegasse, LineID: 136}]
但是现在,我只需将“LineID”添加到列表中,然后返回ID,即可使用:
List container = [];

haltepunkte.forEach((element) {
  if (!container.contains(element["LineID"])) {
    print(element['LineID']);
    container.add(element['LineID']);
  }
});
[101, 136, 538, 611]
有谁知道为什么会这样吗?我的目标是找回一个列表,其中每个LineID仅在其中一次。

最佳答案

原因是您的if语句:

if (!container.contains(element["LineID"])) {
您正在检查列表是否已经包含相同的LineID值。但是,如果将整个元素像container.add(element);一样放入列表,则列表不再包含element["LineID"]的值,而是整个Map元素。contains方法不检查是否可以在列表内的Map对象内找到一个值。它仅检查是否可以找到其他对象的==对象。
更新
一种解决方案是使用Map保存LineID和element之间的关系,并使用它来检查您是否已有该元素。然后,您可以通过获取 map 的值来提取所有元素:
void main() {
  final containerMap = <String, Map>{};

  final haltepunkte = [
    {'LineID': 5, 'txt': 'test'},
    {'LineID': 6, 'txt': 'more tests'}
  ];

  haltepunkte.forEach((element) {
    if (!containerMap.containsKey(element["LineID"])) {
      print(element['LineID']);
      containerMap[element["LineID"]] = element;
    }
  });

  final container = [...containerMap.values];
}

10-08 18:22