Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redis:Lua脚本,用于每隔n个元素返回一个排序集_Lua_Redis - Fatal编程技术网

Redis:Lua脚本,用于每隔n个元素返回一个排序集

Redis:Lua脚本,用于每隔n个元素返回一个排序集,lua,redis,Lua,Redis,我正试图组合一个lua脚本,从Redis调用(通过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 an

我正试图组合一个lua脚本,从Redis调用(通过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的数组


抱歉格式化,在电话上键入。假设该表是一个基于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

对于未来的读者,请在前面的答案中添加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

非常感谢,正在将其插入Redis呼叫,如果我遇到任何Redis特定问题,将向您报告。我觉得不错(这个表确实是一个基于1的数组)。非常感谢您将其插入Redis调用,如果我遇到任何Redis特定的问题,将向您报告。看起来不错(这个表实际上是一个基于1的数组)。