lua table.srot()使用方法

本文介绍了Lua中table.srot()函数的使用方法,强调该函数依赖ipairs遍历,要求key从1开始顺序排列,否则可能导致不可预测的结果。table.srot()支持自定义排序,但必须避免相等时返回true以防止死循环。由于其采用快速排序,当遇到不稳定排序即数组中有重复元素时,可能会导致错误。下期将探讨如何处理非ipairs结构的排序问题。

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

lua table.srot()

lua 的table.srot()函数使用了ipairs的遍历机制,所以要求要排序的table的key从一开始顺序排列。否则结果会千奇百怪,而且每次结果不是稳定的。table.srot()允许用户自定义排序方式,但是不能是不确定排序,及不允许相等时返回true,否则会陷入死循环报错。因为是返回true时就交换位置。table.srot()内部是快速排序。
非ipairs:

local table_s = {[2]="a",[3]="c",[4]="b"}
table.sort(table_s)
for i,v in pairs(table_s) do
	print(i,v)
end

结果:

4	b
2	a
3	c
[Finished in 0.1s]

正确例子:

local table_s = {"a","c","b"}
table.sort(table_s)
for i,v in ipairs(table_s) do
	print(i,v)
end

结果:

1	a
2	b
3	c
[Finished in 0.1s]

自定义排序例子:

local table_s = {"a","c","b"}
table.sort(table_s,function (m,n)
	return m>n
	-- body
end)
for i,v in ipairs(table_s) do
	print(i,v)
end

结果:

1	c
2	b
3	a
[Finished in 0.1s]

不稳定排序:不稳定排序的报错,是要出现在数组中有两个相同的元素的情况下。

local table_s = {"a","c","b","b"}
table.sort(table_s,function (m,n)
	return m >= n
	-- body
end)
for i,v in ipairs(table_s) do
	print(i,v)
end

结果:

C:/Users/DELL/Downloads/lua-5.3.4_Win64_bin/lua: C:\Users\DELL\Desktop\lua_test\contine:55: invalid order function for sorting
stack traceback:
	[C]: in function 'table.sort'
	C:\Users\DELL\Desktop\lua_test\contine:55: in main chunk
	[C]: in ?
[Finished in 0.1s with exit code 1]
[cmd: ['C:/Users/DELL/Downloads/lua-5.3.4_Win64_bin/lua', 'C:\\Users\\DELL\\Desktop\\lua_test\\contine']]
[dir: C:\Users\DELL\Desktop\lua_test]
[path: C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Users\DELL\Downloads\lua-5.3.4_Win64_bin;C:\Users\DELL\AppData\Local\Microsoft\WindowsApps]

那么如果我们一定要使用,非ipirs结构进行排序又要怎么办呢?
这里先不说,毕竟篇幅太长了。下一期会进行介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值