我有以下代码,应该根据它的' pos'返回一个排序数组。值。
local tables = {}
table.insert(tables,{ ['pos']=2, ['name'] = 'C' })
table.insert(tables, {['pos']=1, ['name'] = 'A' })
table.insert(tables,{ ['pos']=30, ['name'] = 'D'} )
function comp(w1,w2)
if tonumber(w1['pos']) > tonumber(w2['pos']) then
return true
end
end
table.sort(tables, comp)
for key,val in pairs(tables) do
print(val['name'])
end
结果是:
d C 甲
预期(按其" pos"按字母顺序排序):
A, C, d
怎么了?
答案 0 :(得分:4)
来自PIL中table.sort(table [, comp])
的文档:
[comp]这个order函数接收两个参数,如果是,则必须返回true 第一个参数应该在排序数组中首先出现
所以将功能更改为:
function comp(w1,w2)
return w1['pos'] < w2['pos']
end
注意tonumber
并且if在这里都是不必要的。
正如@lhf指出的那样,这可以更简单:
table.sort(tables, function(w1, w2) return w1.pos < w2.pos end)