如何在Dart中实现获取数组中最接近指定值的int元素?
在Dart中实现从int数组获取与指定值最接近的元素
给定一个int类型数组和目标值,我们需要编写函数返回数组中与目标值最接近的元素。示例场景如下:
final myArray = [10 , 20, 14, 15, 18, 24]; final int randomInt = 21; getClosestValueInArray(myArray, randomInt); // 预期返回 20
函数实现
int getClosestValueInArray(List<int> array, int value) { // 处理空数组的边界情况,可根据业务需求调整返回逻辑 if (array.isEmpty) { throw ArgumentError("数组不能为空"); } // 初始化最接近元素和最小差值 int closest = array.first; int minDiff = (closest - value).abs(); // 遍历数组逐一比较 for (int num in array.skip(1)) { int currentDiff = (num - value).abs(); // 找到差值更小的元素则更新 if (currentDiff < minDiff) { minDiff = currentDiff; closest = num; } // 可选逻辑:差值相同时选择更大的元素 // else if (currentDiff == minDiff && num > closest) { // closest = num; // } } return closest; }
逻辑说明
- 边界处理:先判断数组是否为空,避免后续操作出现异常,这里选择抛出参数异常,你也可以根据需求返回特定默认值。
- 初始值设定:以数组第一个元素作为初始的最接近元素,同时计算其与目标值的差值绝对值作为初始最小差值。
- 遍历比较:逐个遍历数组剩余元素,计算每个元素与目标值的差值绝对值,若该差值小于当前最小差值,则更新最接近元素和最小差值。
- 差值相等场景:如果需要在两个元素与目标值差值相同时,优先选择更大(或更小)的元素,可取消注释代码块中的逻辑进行调整。
内容的提问来源于stack exchange,提问作者Sunshine
相关产品推荐
相关产品推荐

