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

