【懒人精灵】使用洗牌算法随机打乱table文本数组的次序

业务需求

有一个文本数组:

{
        '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

解释:

  1. shuffle(t) 是一个标准的洗牌算法(Fisher-Yates shuffle),它通过随机交换数组中的元素来打乱顺序。
  2. math.randomseed(os.time()) 用来设置随机种子,这样每次运行时的随机顺序会不同。
  3. 主程序循环 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文本数组的次序

企业级大数据智能营销管理系统

了解详情