Redis:Lua脚本返回排序集合中每隔n个元素的结果。

我正在尝试编写一个 Lua 脚本,通过 Redis(通过 EVAL 调用)返回排序集合中每个间隔的第 n 个元素(n 是集合中的排名,而不是分数)。

很少有在线示例可以用来编写 Lua 脚本,有人能指引我吗?

点赞
用户2198692
用户2198692
local function copyNOtherElements(table, interval, startpos)
    -- 复制每隔若干个元素的元素
    local elemno = 1
    local rettab = {}

    for k, v in ipairs(table) do
        if k >= startpos and (k - startpos) % interval == 0 then
            rettab[elemno] = v
            elemno = elemno + 1
        end
    end

    return rettab
end
2013-04-26 13:56:33
用户1016142
用户1016142

对于未来的读者,在之前的答案中添加 Redis,并使用更高效的代码迭代第 N 个元素:

local function zrange_pick(zset_key, step, start, stop)
    -- 下面的四行代码可以和起始 / 结束参数一起删除,如果和 OP Q 一样不需要的话。
    if start == nil than
        start = 0
    if end == nil than
        end = -1

    local set_by_score = redis.call('ZRANGE', zset_key, start, end)
    local result = {}
    for n = 1, #set_by_score, step do
        table.insert(result, set_by_score[n])
    end
    return result
end
2015-12-16 13:38:22