Lua表排序中,如何自定义比较函数来处理长尾词排序?

2026-04-01 19:321阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计538个文字,预计阅读时间需要3分钟。

Lua表排序中,如何自定义比较函数来处理长尾词排序?

您希望对伪原创内容进行改写,以下是根据您的要求进行改写的开头内容:

---

我有一个包含存储文件名的表格,例如:+ 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 +。

---

请根据需要继续进行内容改写。

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

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

但它出现了:尝试比较两个零值.那么我怎样才能实现呢?

您需要从首先进行比较的文件名中提取一个数字.假设数字是唯一的,这样的东西应该工作:

Lua表排序中,如何自定义比较函数来处理长尾词排序?

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函数中的数字长度.

本文共计538个文字,预计阅读时间需要3分钟。

Lua表排序中,如何自定义比较函数来处理长尾词排序?

您希望对伪原创内容进行改写,以下是根据您的要求进行改写的开头内容:

---

我有一个包含存储文件名的表格,例如:+ 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 +。

---

请根据需要继续进行内容改写。

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

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

但它出现了:尝试比较两个零值.那么我怎样才能实现呢?

您需要从首先进行比较的文件名中提取一个数字.假设数字是唯一的,这样的东西应该工作:

Lua表排序中,如何自定义比较函数来处理长尾词排序?

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函数中的数字长度.