如何在Lua表中查找小于给定数值的最接近值?
问题描述
给定以下Lua代码,需要实现ClosestValue函数,使得调用ClosestValue(myNumber, myTable)时返回450,而非476或其他值:
myNumber = 475 myTable = {400,350,450,500,300,476} function ClosestValue(number, value) --What do I write here? end
解决方案
根据需求,我们需要优先返回小于等于目标数值的最接近值,代码实现如下:
function ClosestValue(target, tbl) local closest = nil local minDiff = math.huge -- 先找小于等于目标值的最接近元素 for _, num in ipairs(tbl) do if num <= target then local diff = target - num if diff < minDiff then minDiff = diff closest = num end end end -- 如果没有符合条件的,再找大于目标值的最接近元素 if not closest then minDiff = math.huge for _, num in ipairs(tbl) do local diff = num - target if diff < minDiff then minDiff = diff closest = num end end end return closest end
逻辑说明
- 第一段循环遍历表内所有小于等于
target的元素,计算每个元素与目标值的差值,记录差值最小的元素。 - 如果表中不存在小于等于目标值的元素,第二段循环会遍历所有元素,找到大于目标值的元素中差值最小的那个。
- 在示例中,小于等于475的元素里,450与475的差值(25)最小,因此函数会返回450,符合需求。
内容的提问来源于stack exchange,提问作者j8den
相关产品推荐
相关产品推荐

