业务需求
有一个文本数组:
{
'https://pan.qqmm.cn/down.php/',
'https://img.ikee.cn/down.php/',
'https://wp.wag.pro/down.php/',
'https://luckyix.cc/down.php/',
}
编写一个函数,实现每次都随机打乱数组内成员的次序
实现
可以使用 math.randomseed
来确保每次打乱时的顺序是不同的。
下面是一个用 懒人精灵的Lua 实现的打乱表顺序的函数 shuffle
,并且循环打印三次打乱后的表,检查每次顺序是否不同。
-- 打乱表顺序
function shuffle(t)
local n = #t
for i = n, 2, -1 do
-- 随机选择一个位置 j (1 <= j <= i)
local j = math.random(i)
-- 交换 t[i] 和 t[j]
t[i], t[j] = t[j], t[i]
end
end
-- 设置随机种子,确保每次运行时随机结果不同
math.randomseed(os.time())
-- 测试表
local urls = {
'https://pan.qqmm.cn/down.php/',
'https://img.ikee.cn/down.php/',
'https://wp.wag.pro/down.php/',
'https://luckyix.cc/down.php/',
}
-- 循环打印3次打乱后的表
for i = 1, 3 do
shuffle(urls) -- 打乱顺序
print("Shuffle #" .. i)
for _, url in ipairs(urls) do
print(url)
end
print() -- 每次打印之间加一行空行
end
解释:
shuffle(t)
是一个标准的洗牌算法(Fisher-Yates shuffle),它通过随机交换数组中的元素来打乱顺序。math.randomseed(os.time())
用来设置随机种子,这样每次运行时的随机顺序会不同。- 主程序循环 3 次,每次都调用
shuffle
来打乱数组,并打印打乱后的顺序。
每次运行程序时,urls
数组的顺序都会不同。
Fisher-Yates洗牌算法是由 Ronald A.Fisher和Frank Yates于1938年发明的,后来被Knuth在书中介绍,很多人直接称Knuth洗牌算法, Knuth是《The Art of Computer Programming》作者,算法理论的创始人。
1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
飞云脚本圈: 586333520
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » 【懒人精灵】使用洗牌算法随机打乱table文本数组的次序
飞云脚本圈: 586333520
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » 【懒人精灵】使用洗牌算法随机打乱table文本数组的次序