Получить список ключей в порядке убывания в Луа Скипт

У меня есть один список в хранилище ключей Redis. он содержит дату в качестве имени ключа, как это.

key  
===  
20160429 
20160430 
20160501
20160502

Теперь я хочу набрать последние 2 клавиши, для этого я делаю следующее в своем скрипте lua.

local data = {};
local keyslist = redis.call('keys', 'stats:day:*');
local key, users, redisData;
-- keyslist = #keyslist.sort(#keyslist, function(a, b) return a[2] > b[2] end);
-- keyslist = #keyslist.sort(#keyslist, function(a,b) if a>b then return true; else return false; end end); 
for iCtr = 1, #keyslist do

    key = string.gsub(keyslist[iCtr], 'stats:day:','');
    redisData = redis.call('hmget', keyslist[iCtr], 'image','video');
    table.insert(data, {date=key, imgctr=redisData[1], vidctr=redisData[2]});
    if iCtr == 2 then break end
end

но это возвращает первые 2 записи, мне нужны последние 2 записи (например, следующие ключи)

20160501
20160502

Как получить список ключей по убыванию?

2 ответа

Решение

Если я вас правильно понимаю, вы можете сделать следующее:

local count = 0
for iCtr = #keyslist-1,#keyslist do
  count=count+1
  --do your stuff
  if count == 2 then break end
  --or
  if iCtr == #keyslist then break end
end

Это начнется с предпоследнего пункта в списке ключей, а затем будет увеличиваться. Обратите внимание, я не тестировал код, но он должен работать..

Пример кода для сортировки таблицы Lua:

keylist = {1,2,5,8,3, 5}

-- after the following line keylist will be sorted ascending (default)

table.sort(keylist)

-- this line is equivalent:

table.sort(keylist, function (a,b) return a < b end)

вторым параметром является table.sort - это функция, которая принимает два табличных значения и возвращает true, если первое меньше второго.

Чтобы отсортировать таблицу по убыванию, просто позвоните

table.sort(keylist, function(a,b)return a > b end)

Помните, что вы можете использовать это только для сортировки значений таблицы, а не их ключей. Но так как вы используете ключи в другом контексте, это должно решить вашу проблему.

Другие вопросы по тегам