如果您需要完整的示例,代码位于DartPad上(请参见while
循环的结尾部分)。
我有一个循环,
Place place = places[0];
while (places.isNotEmpty) {
// Get a list of places within distance (we can travel to)
List reachables = place.getReachables();
// Get the closest reachable place
Place closest = place.getClosest(reachables);
// Remove the current place (ultimately should terminate the loop)
places.remove(place);
// Iterate
place = closest;
}
但是它没有删除倒数第二行的place
,也就是说,places
列表的长度保持不变,使它成为一个无限循环。
6条答案
按热度按时间kzmpq1sx1#
这可能是因为列表中的对象与您试图删除的对象具有不同的hashCode。
请尝试使用以下代码,通过比较对象属性找到正确的对象,然后再删除它:
另一种选择是覆盖类中的==运算符和hashCode。
rqcrx0a62#
我也遇到过同样的问题。不幸的是,我还没有找到根本原因,但在同样的情况下,我更换了
places.remove[place]
与
places.removeWhere(p => p.hachCode == place.hashCode)
作为一种变通方法。还有一种方法也很有帮助:
qni6mghb3#
很可能由于某种原因
place
不在列表中。如果不知道所使用的确切数据,很难进行调试,链接的DartPad中的三位示例不会重现该问题。尝试找出导致问题的元素。例如,您可以尝试在删除之前添加一个
if (!places.contains(place)) print("!!! $place not in $places");
,或类似的东西,以检测问题发生时的状态。8e2ybdfx4#
这样,您就可以从动态列表中删除对象
产出
1sbrub3j5#
使用插件Equatable
类Place扩展为Equatable {...}
https://pub.dev/packages/equatable
u2nhd7ah6#
我也遇到了同样的问题。我用
removeWhere
做了这样的事情。