我正在尝试组合一个要从 Redis 调用的 lua 脚本(通过 EVAL 调用),以便返回已排序集合的每隔 n 个元素(第 n 个是集合中的排名,而不是分数)。
可用于构建的 Lua 脚本的在线示例很少,有人能指出我正确的方向吗?
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 的数组
对于未来的读者,将 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