如何提取列表中自定义min到max范围内的元素(包含两端)
问题解决:包含指定起止元素的子列表获取
你的代码问题核心在于Dart的List.sublist方法特性——它是左闭右开区间,即sublist(start, end)会包含start索引的元素,但不包含end索引的元素。传入(5,16)时,16对应的索引b是11,sublist(a, b)只会取到索引10的元素(也就是10),自然不会包含16。
修改后的代码
findSecondRange(int minVal, int maxVal, List arr) { // 修正拼写错误:lees → less if (minVal > maxVal) { print("Min should be less than max"); return []; // 增加返回值避免后续逻辑报错 } var a = arr.indexOf(minVal); var b = arr.indexOf(maxVal); // 处理元素不在列表中的边界情况 if (a == -1 || b == -1) { print("Min or Max value not found in the array"); return []; } // 确保起始索引小于等于结束索引,兼容min在数组中位置比max靠后的场景 int start = a <= b ? a : b; int end = a <= b ? b + 1 : a + 1; Iterable result = arr.sublist(start, end); return result; }
关键修改点说明
- 将
sublist的结束参数改为目标索引 + 1,确保包含传入的max元素 - 增加元素不存在的判断逻辑,避免
indexOf返回-1时调用sublist触发异常 - 兼容
min在数组中位置比max靠后的场景,保证能正确截取两个元素之间的所有内容 - 修正提示文字拼写错误,并在参数校验不通过时返回空列表,避免后续逻辑异常
用你的测试案例验证:传入(5,16)时,a为4,b为11,end设为12,sublist(4,12)会返回[5,4,1,0,9,2,10,16],完全符合需求。
内容的提问来源于stack exchange,提问作者SOW
相关产品推荐
相关产品推荐

