2

我正在尝试组合一个要从 Redis 调用的 lua 脚本(通过 EVAL 调用),以便返回已排序集合的每隔 n 个元素(第 n 个是集合中的排名,而不是分数)。

可用于构建的 Lua 脚本的在线示例很少,有人能指出我正确的方向吗?

4

2 回答 2

2
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

抱歉格式化,在手机上打字。假设该表是一个基于 1 的数组

于 2013-04-26T13:56:33.100 回答
2

对于未来的读者,将 Redis 添加到上一个答案中,并使用更有效的代码来迭代第 N 个元素:

local function zrange_pick(zset_key, step, start, stop)
    -- The next four lines can be removed along with the start/stop params if not needed as in 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-16T13:38:22.957 回答