关联数组排序值

时间:2015-02-18 17:20:39

标签: sorting lua lua-table

我有以下代码,应该根据它的' 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

怎么了?

1 个答案:

答案 0 :(得分:4)

来自PILtable.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)