大佬教程收集整理的这篇文章主要介绍了排序 – Lua排序表按字母顺序排列,除了数字,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
下面的代码显示了如何使用比较器函数对表进行排序:
function( a,b ) return a.N < b.N end
给我:
obj = { [1] = { ["N"] = "Green 1"; }; [2] = { ["N"] = "Green 11"; }; [3] = { ["N"] = "Green 2"; }; [4] = { ["N"] = "Red 1"; }; }
但是我希望它像这样排序:
obj = { [1] = { ["N"] = "Green 1"; }; [2] = { ["N"] = "Green 2"; }; [3] = { ["N"] = "Green 11"; }; [4] = { ["N"] = "Red 1"; }; }
可能吗?
local function cmp(a,b) a = toString(a.N) b = toString(b.N) local patt = '^(.-)%s*(%d+)$' local _,_,col1,num1 = a:find(patt) local _,col2,num2 = b:find(patt) if (col1 and col2) and col1 == col2 then return tonumber(num1) < tonumber(num2) end return a < b end local obj = { { N = '1' },{ N = 'Green1' },-- works with optional space { N = 'Green' },-- works when doesn't fit the format { N = 'Sky blue99' },{ N = 'Green 11' },{ N = 'Green 2' },{ N = 'Red 02' },-- works when has leading zeros { N = 'Red 01' },-- works with padding spaces { N = 'Sky blue 42' },-- works with multi-word color names { N = 99 },-- works with numbers } table.sort(obj,cmp) for i,v in ipairs(obj) do print(i,v.N) end
打印:
1 1 2 99 3 Green 4 Green1 5 Green 2 6 Green 11 7 Red 01 8 Red 02 9 Sky blue 42 10 Sky blue99
以上是大佬教程为你收集整理的排序 – Lua排序表按字母顺序排列,除了数字全部内容,希望文章能够帮你解决排序 – Lua排序表按字母顺序排列,除了数字所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。