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

如何在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

逻辑说明

  1. 第一段循环遍历表内所有小于等于target的元素,计算每个元素与目标值的差值,记录差值最小的元素。
  2. 如果表中不存在小于等于目标值的元素,第二段循环会遍历所有元素,找到大于目标值的元素中差值最小的那个。
  3. 在示例中,小于等于475的元素里,450与475的差值(25)最小,因此函数会返回450,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:25:20