如何检查List元素是否存在,从另一List添加新元素且重载后不覆盖?
问题分析与代码修正
你的代码逻辑存在错误,导致实际行为和需求不匹配:
- 你遍历目标List
list的元素,却判断该元素是否存在于list中,这个条件永远为false,但实际运行输出却添加了元素,说明你搞反了判断的对比对象。 - 需求是将另一List中的新元素添加至目标List,且不重复添加原有元素,你当前的代码不仅逻辑判断错误,甚至可能搞反了“目标List”和“待添加元素的List”的角色。
正确代码实现
场景1:将newValueInt中不存在于list的元素添加到list(不覆盖list原有元素)
这是最贴合需求描述的实现:
// 目标List List<int> list = [2, 3, 5]; // 提供新元素的List List<int> newValueInt = [2, 6, 7]; // 遍历待添加的元素,检查是否已在目标List中 for (var item in newValueInt) { if (!list.contains(item)) { list.add(item); } } print(list); // 输出: [2, 3, 5, 6, 7]
场景2:将list中不存在于newValueInt的元素添加到newValueInt
如果你的实际需求是往newValueInt中补充list里的独有元素,修正后的代码如下:
List<int> list = [2, 3, 5]; List<int> newValueInt = [2, 6, 7]; for (var item in list) { if (!newValueInt.contains(item)) { newValueInt.add(item); print(newValueInt); } } // 输出: // [2, 6, 7, 3] // [2, 6, 7, 3, 5]
错误原因说明
你原代码中的判断条件!list.contains(item)完全错误——item本身就是从list中遍历出来的元素,这个条件永远不会成立。正确的逻辑应该是:判断当前遍历的元素是否存在于你要补充的目标集合中,也就是把判断的集合换成对应的List。
内容的提问来源于stack exchange,提问作者user16357470
相关产品推荐
相关产品推荐

