Lua table sort

本文详细介绍了Lua语言中对Table进行排序的方法,并通过实例演示了如何对数组类型的Table进行排序,以及如何解决非数组类型Table排序的问题。文章还提供了一个自定义函数来帮助对Table中的元素按指定规则进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于lua中table的排序,简单的table都会直接用到table.sort()

举个例子

local temp =
{
	id,
	name,
}

table.insert(temp, {id = 36, name = 2})
table.insert(temp, {id = 1, name = 2})
table.insert(temp, {id = 2, name = 2})
table.insert(temp, {id = 3, name = 2})

table.sort(temp,function(a,b) return (a.id < b.id) end)

for k,v in pairs(temp) do
    print(k,v.id)
end
打印出来的结果为
1	1
2	2
3	3
4	36
但这样的排序仅限于数组类型的table,对table表为hash部分是不起作用的,会导致table并不会按照顺序排列

例如

local temp1 =
{
	{"123123123"},
	id = 1,
	name = "huohuo",
	test = "都选C"
}
table.sort(temp1, function(a,b) return tostring(a) > tostring(b)
end)

for k,v in pairs(temp1) do
    print(k,v)
end

1	table: 0xecaae0
id	1
test	都选C
name	huohuo
所以需要写一个
function SortByKeys (t, f)
    local a = {}

    for key,n in pairs(t) do table.insert(a, n) end
    if #a > 1 then
        table.sort(a, f)
     end
    local i = 0                -- iterator variable

    local iter = function ()    -- iterator function

        i = i + 1

        if a[i] == nil then
            return nil
        else
            return i, a[i]
        end
    end
    return iter
end

for name, line in SortByKeys(temp1 , sortFunc) do
    print(name, line)
end
1	都选C
2	table: 0xecaae0
3	huohuo
4	1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值