【发布时间】:2020-12-06 01:48:38
【问题描述】:
我在 lua 中有两个表(在生产中,a 有 18 个元素,b 有 8 个):
local a = {1,2,3,4,5,6}
local b = {3,5,7,8,9}
我需要返回 'a',省略 'b' 中的任何常见元素 -- {1,2,4,6} 类似于 ruby 命令 a-b(如果 a 和 b 是数组)。
我能想到的最好的 lua 逻辑是:
local function find(a, tbl)
for _,a_ in ipairs(tbl) do if a_==a then return true end end
end
function difference(a, b)
local ret = {}
for _,a_ in ipairs(a) do
if not find(a_,b) then table.insert(ret, a_) end
end
return ret
end
local a = {1,2,3,4,5,6}
local b = {3,5,7,8,9}
local temp = {}
temp = difference(a,b)
print(temp[1],temp[2],temp[3],temp[4])
我需要快速遍历这些表格比较(生产中每秒最少 10K 次)。有没有更清洁的方法来做到这一点?
======
这是 redis 服务器端脚本的一部分,我必须保护我的 Redis CPU。在干净的 Lua 进程之外,我还有另外两个选择:
1.创建两个 redis 临时键,然后运行 sinter 以获得 42 的 big(O)
- 18 悲伤(一)
- 8 悲伤(b)
- 16烧结(a,b)
2.将a和b都返回给ruby做数组比较并返回结果。
- 每秒数千个连接的后端和四分之一的网络成本将消耗资源。
【问题讨论】:
-
您是否可以控制如何定义表
a和b? -
在某种程度上是的。思维定势?
标签: optimization lua redis server-side