如何使用表格对表格进行排序?

在我的情况下如何按id对表格排序?

我有一个从json文件输出的表格,并且是的在我的表格中有零值,而非表格。 输入要排序的表格如下:

local tbl = {1=0, 2=0, 3={ id='1' }, 4={ id='2' }, 5={ id='3'}, 6=0}

和sort函数

    local pos = 1
    local sort = function(data)
        for i = 1 , table.maxn(data) do
            if (data[i-1] != 0) and (data[i] == 0) then -- 查找下一个值
                pos = i
            elseif (data[i] == 0) then
                pos = i
            end
            if (data[i] != 0) and (i > pos) then -- 更改值
                if (data[i-1] == 0) and (i > 0) then
                    data[pos] = data[i]
                    data[i] = 0
                    pos = i
                    hasChanged = true
                    print(data[i])
                    sort(data)
                end
            end
        end
    end
    sort(data)

这对我的情况是很好的工作但如果我想用一些值进行排序我不知道该怎么做...

点赞
用户3574628
用户3574628

table.sort 函数包含一个参数,可以用来指定如何比较表元素。下面的函数假设零值必须放在任何表的后面,不考虑无效数据。请注意,对于相等的参数,函数必须返回 false

local function lessThan(a, b)
  if a == 0 then
    -- 如果 a 等于 b,或者它必须放在最后。
    return false
  elseif b == 0 then
    -- b必须放在最后。
    return true
  else
    -- 两个参数都不为0。
    return a.id < b.id
  end
end

table.sort(tbl, lessThan)

如果您的表不是一个有效的序列(包含 nil),则可以使用 pairs 将元素放入一个新表中,然后再调用 table.sort

local array = {}
for _, v in pairs(tbl) do
  table.insert(array, v)
end
table.sort(array, lessThan)
2020-03-21 20:54:35