因此,在让这个表格正确排序时遇到一些问题。
基本上,table.sort
认为10 == 1,20 == 2,依此类推。我将在下面发布我的排序代码,但我不确定它是否与它有任何关系。这只是Lua中table.sort算法的一个固有问题吗?
if svKey == "q" and metalMatch == true then
table.sort(vSort.metals, function(oneMQ, twoMQ)
return oneMQ.metalQ > twoMQ.metalQ
end)
end
vSort.metals.metalQ
中存储的值是长度为1到3位的字符串。有没有办法让table.sort
区分单位,双位和三位数值?
答案 0 :(得分:3)
The order operators work as follows. If both arguments are numbers, then they are compared as such. Otherwise, if both arguments are strings, then their values are compared according to the current locale.您可以set the locale。字符串按字典顺序进行比较,通常在较长的字符串之前用字符表示较短的字符串。
如果您想要数字排序,那么请使用数字类型。这可能有效:
function(oneMQ, twoMQ)
return tonumber(oneMQ.metalQ) > tonumber(twoMQ.metalQ)
end
它假定所有metalQ值都是数字。如果不是,则强制使用默认值或在排序表达式中为非数字值提供回退排序顺序。