gpt4 book ai didi

sorting - Lua:表格排序中的自定义比较功能

转载 作者:行者123 更新时间:2023-12-05 00:56:00 25 4
gpt4 key购买 nike

我有一个存储文件名的表,例如:

1.jpg
5.jpg
4.jpg
10.jpg
2.jpg

现在我想对其进行排序。我使用了以下代码: table.sort(myTable)
结果是
1.jpg
10.jpg
2.jpg
4.jpg
5.jpg

但是,我想这样排序:
1.jpg
2.jpg
4.jpg
5.jpg
10.jpg

所以我写了一个自定义比较函数:
function compare(a, b)
return tonumber(a) < tonumber(b)
end

但结果是: attempt to compare two nil values .那么我该如何实现呢?

最佳答案

您需要先从要比较的文件名中提取一个数字。假设数字是唯一的,这样的事情应该有效:

function compare(a, b)
return tonumber(a:match("%d+")) < tonumber(b:match("%d+"))
end

您可能还想查看我在 Alphanum sorting for humans in Lua 上的帖子,涵盖了这种情况和其他情况。

[已更新以解决评论中的问题] 要按字符串和数字的组合进行排序,您只需遵循链接博客文章中的选项之一。例如,要对您在注释中列出的文件名进行排序,您可以使用以下命令:
local t = {"file001_abc_10.txt", "file001_abc_2.txt", "file001_bcd_4.txt", "file001_bcd_12.txt"}
function compare(a, b)
local function padnum(n, rest) return ("%03d"..rest):format(tonumber(n)) end
return tostring(a):gsub("(%d+)(%.)",padnum) < tostring(b):gsub("(%d+)(%.)",padnum)
end
table.sort(t, compare)
print(unpack(t))

这打印: file001_abc_2.txt file001_abc_10.txt file001_bcd_4.txt file001_bcd_12.txt .您可以在 padnum 中调整号码长度功能。

关于sorting - Lua:表格排序中的自定义比较功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37042949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com