我希望在lua中有一个简单的数据结构,类似于Java HashMap等价物。
这样做的目的是,我希望保持一个唯一的键'userID'映射到一组两个值,这些值会不断更新,例如;
'77777', {254, 24992}
有关如何实现这一目标的任何建议?
-- Individual Aggregations
local dictionary = ?
-- Other Vars
local sumCount = 0
local sumSize = 0
local matches = redis.call(KEYS, query)
for _,key in ipairs(matches) do
local val = redis.call(GET, key)
local count, size = val:match(([^:]+):([^:]+))
topUsers(string.sub(key, 11, 15), sumCount, sumSize)
-- Global Count and Size for the Query
sumCount = sumCount + tonumber(count)
sumSize = sumSize + tonumber(size)
end
local result = string.format(%s:%s, sumCount, sumSize)
return result;
-- Users Total Data Aggregations
function topUsers()
-- Do sums for each user
end
答案 0 :(得分:3)
假设字典是你要问的:
local dictionary = {
['77777'] = {254, 24992},
['88888'] = {253, 24991},
['99999'] = {252, 24990},
}
棘手的部分是密钥是一个无法转换为Lua变量名的字符串,因此您必须用[]
包围每个密钥。我在Lua 5.1 reference manual找不到明确的规则说明,但Lua wiki表示如果一个键“由下划线,字母和数字组成,但不以数字开头”只有在以上述方式定义时才需要[]
,否则方括号是必需的。
答案 1 :(得分:0)
只需使用由userID索引的Lua表,并使用带有两个条目的另一个Lua表:
T['77777']={254, 24992}
答案 2 :(得分:0)
这可能是解决方案的实施。
local usersTable = {}
function topUsers(key, count, size)
if usersTable[key] then
usersTable[key][1] = usersTable[key][1] + count
usersTable[key][2] = usersTable[key][2] + size
else
usersTable[key] = {count, size}
end
end
function printTable(t)
for key,value in pairs(t) do
print(key, value[1], value[2])
end
end