因此,我尝试过滤包含一些对象的普通列表。在这些对象中是一个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];
}