You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取列表中自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 03:17:09