print(math.min(unpack({2,7,-9,27,36,16})))
解释:
math.min 接受可变参数 - 如果你给它 n 个参数,它会给你最小的一个:
print(math.min(3,2,1)) -- prints 1
print(math.min(3,2,1,0,-1,-2) -- prints -2
在 Lua 中,您可以拥有“独立的逗号分隔的表达式列表”。可能最简单的方法是在为多个变量分配多个值时查看它们:
local x,y,z = 1,2,3 -- 1,2,3 is a comma-separated list of values
print(x) -- prints 1
将参数传递给函数时,您传递的参数是那些表达式列表之一。
像{2, 7, -9, 0, 27, 36, 16} 这样的类数组表不是一回事。相反,它是表类型的单个表达式的列表。您可以通过用逗号分隔表格来制作表格列表。例如:
local arr1, arr2, arr3 = {2, 7, -9, 0, 27, 36, 16}, {0,1}, {5,6,7}
unpack 函数(在某些版本的 Lua 中,它位于 table.unpack 内部)将类似数组的表转换为值列表。
local x,y,z = unpack({1,2,3})
print(x) -- 1
结合这三件事,你最终得到了我一开始给你的 1-liner:
print(math.min(unpack({2,7,-9,27,36,16})))
编辑:@Piglet 的评论是正确的。函数可以接受的参数数量是有限制的,所以如果传递的表有太多元素,我的基于unpack 的解决方案将失败。似乎参数的最大数量取决于你如何编译 Lua,但一般来说,假设它在“小于 50”时可以正常工作似乎是安全的。如果您的表可以有超过 50 个项目,请改用他的基于 for 的解决方案。