加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

排序 – Lua:表排序中的自定义比较功能

发布时间:2020-12-14 21:43:25 所属栏目:大数据 来源:网络整理
导读:我有一个存储文件名的表,例如: 1.jpg5.jpg4.jpg10.jpg2.jpg 现在我想对它进行排序.我使用了以下代码: table.sort(myTable的) 结果是 1.jpg10.jpg2.jpg4.jpg5.jpg 但是,我想这样排序: 1.jpg2.jpg4.jpg5.jpg10.jpg 所以我写了一个自定义比较函数: function
我有一个存储文件名的表,例如:

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

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

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读