首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Lua求表中最小的数

如何用Lua求表中最小的数
EN

Stack Overflow用户
提问于 2021-09-28 10:03:27
回答 2查看 1.4K关注 0票数 4

我不擅长编程,也不太熟悉Lua。有人能帮我解释一下我应该做什么的逻辑吗?我有一个用值填充的表,需要返回最小号,在本例中是-9。我知道我需要使用math.min,但不知道如何正确使用它。这是我正在使用的代码的简化版本,但它试图找出基本的内容,希望我自己也能完成剩下的工作。任何帮助都是非常感谢的。谢谢。

例如:

代码语言:javascript
复制
local test_1 = {2, 7, -9, 0, 27, 36, 16}

function min()
    print(math.min(test_1))
end

min()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-28 10:53:11

kikito的解决方案是有限的。对于具有数千个元素的大表,它将失败,因为Lua不能解压缩太多的值。

这是直接的解决方案。遍历桌子,记住最小的值。

代码语言:javascript
复制
local min = math.huge
for i = 1, #test_1  do
  min = min < test_1[i] and min or test_1[i]
end
print(min)

由于函数调用,速度有点慢

代码语言:javascript
复制
for i,v in ipairs(test_1) do
  min = math.min(min, v)
end
print(min)

也有可能,但速度慢,排序表上升。您的第一个元素是最小值。

代码语言:javascript
复制
table.sort(test_1)
print(test_1[1])
票数 8
EN

Stack Overflow用户

发布于 2021-09-28 10:19:20

代码语言:javascript
复制
print(math.min(unpack({2,7,-9,27,36,16})))

解释:

math.min接受各种参数--如果给它n个参数,它将给出最小的参数:

代码语言:javascript
复制
print(math.min(3,2,1))        -- prints 1
print(math.min(3,2,1,0,-1,-2) -- prints -2

在Lua你可以有“独立昏迷-分开的表达列表”。也许查看它们的最简单方法是将多个值赋值给多个变量:

代码语言:javascript
复制
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}这样的类似数组的表不是一回事。相反,它是类型表的单个表达式的列表。您可以通过用逗号分隔表来列出表。例如:

代码语言:javascript
复制
local arr1, arr2, arr3 = {2, 7, -9, 0, 27, 36, 16}, {0,1}, {5,6,7}

unpack函数(在某些版本的Lua中,它位于table.unpack中)将类似数组的表转换为一个值列表。

代码语言:javascript
复制
local x,y,z = unpack({1,2,3})
print(x) -- 1

把这三件事结合起来,你就得到了我在一开始给你的1条线:

代码语言:javascript
复制
print(math.min(unpack({2,7,-9,27,36,16})))

编辑:@Piglet的评论是正确的。函数可以接受的参数数量有限,所以如果传递的表包含太多元素,我的unpack-based解决方案将失败。参数的最大数量似乎取决于编译Lua的方式,但一般来说,假设它在“小于50”时运行良好是安全的。如果您的表可以有50多个项,请使用他的for-based解决方案。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69359710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档