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

Lua如何将数组/字符串转为min_mean_max函数的可变参数?

解决Lua中min_mean_max函数的参数适配问题

问题场景

需要为Lua的min_mean_max可变参数函数传递参数时,尝试用table.concat(mytable, ", ")处理数组得到的数字字符串无法适配函数的可变参数形式,需要将数组{961, 335, 342, 453, 601, 767, 889, 936}或字符串"961, 335, 342, 453, 601, 767, 889, 936"转为函数可用的参数形式。

原函数代码

local function min_mean_max(...)
  local min = select(1, ...)
  local max = select(1, ...) 
  local mean = 0
  -- 遍历所有传入的数字,用_占位索引变量
  for _, number  in ipairs({...}) do
    -- 更新最小值
    if min > number then min = number end
    -- 更新最大值
    if max < number then max = number end
    -- 累加求和用于计算平均值
    mean = mean + number
  end
  -- 计算平均值
  mean = mean / #{...}
  return min, mean, max
end

解决方案

1. 数组转可变参数传递

Lua提供了table.unpack(Lua 5.2及以上版本)或unpack(Lua 5.1版本)函数,可直接将数组的元素拆解为独立参数传入函数,完美匹配...的可变参数形式。

示例代码:

local mytable = {961, 335, 342, 453, 601, 767, 889, 936}
-- Lua 5.2+ 使用 table.unpack,Lua 5.1 使用 unpack(mytable)
local min, mean, max = min_mean_max(table.unpack(mytable))
print("Minimum, mean and maximum numbers are", min, mean, max)

2. 字符串转可变参数传递

需要先将逗号分隔的数字字符串分割为数字数组,再用上述方法传递:

示例代码:

local num_str = "961, 335, 342, 453, 601, 767, 889, 936"
local num_table = {}
-- 匹配字符串中的所有数字,转为数值后存入数组
for num in string.gmatch(num_str, "%d+") do
    table.insert(num_table, tonumber(num))
end
-- 拆解数组为参数传入函数
local min, mean, max = min_mean_max(table.unpack(num_table))
print("Minimum, mean and maximum numbers are", min, mean, max)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:10:32