Dart中List.removeWhere删除列表元素结果不符合预期问题
问题原因
你代码里的删除判断逻辑和预期需求完全不匹配:
- 你原本想删除的是列表里索引为3的元素
'four' - 但你写的判断条件
item.length == 3,实际逻辑是删除所有字符长度等于3的元素,和元素索引没有任何关系。
原列表四个元素的字符长度分别是:
'one':长度3,满足删除条件,被移除'two':长度3,满足删除条件,被移除'three':长度5,不满足条件,保留'four':长度4,不满足条件,保留
最终运行输出[three, four]是当前代码逻辑的正常结果,只是这个逻辑和你想要的效果不一致。
正确实现方式
要实现删除索引为3的元素、最终输出['one', 'two', 'three']的需求,直接用列表的removeAt方法传入目标索引即可,代码如下:
final numbers = <String>['one', 'two', 'three', 'four']; numbers.removeAt(3); // 传入要删除的元素索引 print(numbers); // 输出 [one, two, three],符合预期
如果有场景必须用removeWhere按索引判断,可以根据实际场景选择对应方案:
- 列表无重复元素时,可通过
indexOf获取元素索引做判断:numbers.removeWhere((item) => numbers.indexOf(item) == 3); - 需要删除连续索引段的元素时,用
removeRange效率更高,比如删除索引3位置的单个元素可以写为:numbers.removeRange(3, 4);
内容的提问来源于stack exchange,提问作者user19540574
相关产品推荐
相关产品推荐

