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
相关产品推荐
相关产品推荐

