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

Dart中如何在按键升序的Map中定位包围指定双精度值的两个相邻键

Dart 实现查找升序Map中包围目标值的相邻Key

实现代码

void main() {
  Map<int, int> perc = { 
    0: 0,
    20: 1,
    27: 2,
    33: 3 
  };
  double whereIsThis = 13.52;

  // 提取已升序排列的key列表
  List<int> sortedKeys = perc.keys.toList();
  int? leftKey;
  int? rightKey;

  for (int key in sortedKeys) {
    if (key > whereIsThis) {
      rightKey = key;
      break;
    }
    leftKey = key;
  }

  // 输出结果
  if (leftKey == null) {
    print("$whereIsThis 小于所有key,最小key为 ${sortedKeys.first}");
  } else if (rightKey == null) {
    print("$whereIsThis 大于所有key,最大key为 ${sortedKeys.last}");
  } else {
    print("$whereIsThis位于*$leftKey*和*$rightKey*之间");
    // 如需获取对应的value,直接取perc[leftKey]、perc[rightKey]即可
  }
}

逻辑说明

  • 因为你已经提前保证Map按key升序排序,所以直接提取key生成的列表就是升序结构,无需额外排序浪费性能。
  • 遍历key列表时,每次将当前key暂存为左边界,直到找到第一个大于目标值的key作为右边界,即可跳出循环。
  • 代码额外加入了超出边界的判断逻辑,不需要可以直接删除。

运行示例输入后输出结果为:13.52位于*0*和*20*之间,完全符合需求。

内容的提问来源于stack exchange,提问作者BNetz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:24:04