2016-05-02 24 views
1

私はredisキーストアに1つのリストを持っています。これは、このようなキー名として日付を含んでいます。lua sciptの降順でキーリストを取得

key 
=== 
20160429 
20160430 
20160501 
20160502 

私は最後の2つのキーをキーしたいと思います。これは私のルアスクリプトでは次のようにしています。

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 

を必要とするどのように私は、キーのリストを降順得るのですか? Luaのテーブルをソートするため

答えて

1

私は右のあなたを理解していれば、次の操作を実行したい場合があります:

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 

これはkeyslistに最後から二番目の項目でスタートし、その後上向きにカウントされます。 メモ、私はコードをテストしませんでしたが、それは動作する必要があります..

+0

ありがとう@felixb、それは私の期待された結果に非常に近いです。私は私の質問で言及したように、ASCの順序で最終的な結果が必要です。 –

+0

コードを更新しました。最後の2つの要素が常に対応する順序で提供されるようになりました。希望(まだテストされていない) – FelixB

+0

おかげで、少しの変更とその作品:iCtr =#keyslist-1、#keyslist do –

1

サンプルコード:

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) 

2番目のパラメータはtable.sortにある2つのテーブルの値をとり、最初のものが、第二のものよりも小さい場合に真を返す関数です。あなただけのテーブル値ではなく、彼らのキーをソートするためにこれを使用することができますことを心に留めておいてくださいあなたは、単に

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

を呼び出す降順テーブルをソートする

。しかし、異なるコンテキストでキーを使用しているので、これはあなたの問題を解決するはずです。

+0

ありがとう@私の返信のためのピグレット。私は自分の問題を説明するのに最善のレベルを試みましたが、私の貧しい英語のせいで、私はそれを正しく説明していないかもしれません。本当にとても残念です。 –

+0

@ManishSapkal私は私の答えを少し変えました、私はあなたの "キー"の使用によって混乱しました。これがより良い助けになることを願っていますか? – Piglet

関連する問題