Dictionary 表内的Lua表比较
因此,我有一个表,其中包含对其他表的引用,如:Dictionary 表内的Lua表比较,dictionary,lua,lua-table,Dictionary,Lua,Lua Table,因此,我有一个表,其中包含对其他表的引用,如: local a = newObject() a.collection = {} for i = 1, 100 do local b = newObject() a[#a + 1] = b end 现在,如果我想知道某个特定对象是否在“a”中,我必须使用这样的对: local z = a.collection[ 99 ] for i,j in pairs( a.collection ) do if j == z then
local a = newObject()
a.collection = {}
for i = 1, 100 do
local b = newObject()
a[#a + 1] = b
end
现在,如果我想知道某个特定对象是否在“a”中,我必须使用这样的对:
local z = a.collection[ 99 ]
for i,j in pairs( a.collection ) do
if j == z then
return true
end
end
z对象位于第99个位置,我必须等待成对对象在其他98个对象中迭代。这个设置使我的程序爬行。有没有一种方法可以生成某种键,它不是字符串,也不是表与表之间的比较,而是一行代码?比如:
如果a.collection[{z}],则返回true end
提前谢谢 不知道它是否更快,但这可能有帮助: 填充:
local a = {}
a.collection = {}
for i = 1, 100 do
local b = {}
a.collection[b] = true -- Table / Object as index
end
发现:
local z = a.collection[99]
if a.collection[z] then return true end
local z = a.collection[99]
if a.collection[z] then return true end
如果这不是您想要做的,您可以将整个数组分解为更小的存储桶,并使用散列来跟踪哪个对象属于哪个存储桶。不知道它是否更快,但这可能有帮助: 填充:
local a = {}
a.collection = {}
for i = 1, 100 do
local b = {}
a.collection[b] = true -- Table / Object as index
end
发现:
local z = a.collection[99]
if a.collection[z] then return true end
local z = a.collection[99]
if a.collection[z] then return true end
如果这不是你想要做的,你可以把整个数组分解成更小的桶,并用散列来跟踪哪个对象属于哪个桶。
你可能想考虑从使用对()切换到使用正则for循环并对表进行索引。for i=1, #a.collection do
if a.collection[i] == z then
return true
end
end
我比较了使用pairs()和table索引遍历100万个表集合的速度,每次索引都要快一点。您可以使用os.clock()来评测代码
除了使用某种散列函数将唯一索引设置到a.collection表中之外,我真的想不出一种更快的解决方案。然而,这样做会使获得一个特定的表成为一项非常重要的任务(你不仅可以做一个.collection[99],你还必须迭代直到找到一个你想要的表。但是,你可以通过做类似于a.collection[hashFunc(z)]~=nil…)的事情来轻松地测试该表是否在a.collection中 您可能想考虑从使用SUBSH()切换到使用常规for循环并对表进行索引,在较大的表集合中,对()的速度似乎较慢。
for i=1, #a.collection do
if a.collection[i] == z then
return true
end
end
我比较了使用pairs()和table索引遍历100万个表集合的速度,每次索引都要快一点。您可以使用os.clock()来评测代码
除了使用某种散列函数将唯一索引设置到a.collection表中之外,我真的想不出一种更快的解决方案。然而,这样做会使获得一个特定的表成为一项非常重要的任务(你不仅可以做一个.collection[99],你还必须迭代直到找到一个你想要的表。但是,你可以通过做类似于a.collection[hashFunc(z)]~=nil…)的事情来轻松地测试该表是否在a.collection中为什么要将对象存储在表的值槽而不是键槽中
local a = newObject()
a.collection = {}
for i = 1, 100 do
local b = newObject()
a.collection[b] = i
end
查看特定对象是否在“a”中
如果需要对集合进行整数索引访问,请以两种方式进行存储:
local a = newObject()
a.collection = {}
for i = 1, 100 do
local b = newObject()
a.collection[i] = b
a.collection[b] = i
end
发现:
local z = a.collection[99]
if a.collection[z] then return true end
local z = a.collection[99]
if a.collection[z] then return true end
为什么要将对象存储在表的值槽而不是键槽中
local a = newObject()
a.collection = {}
for i = 1, 100 do
local b = newObject()
a.collection[b] = i
end
查看特定对象是否在“a”中
如果需要对集合进行整数索引访问,请以两种方式进行存储:
local a = newObject()
a.collection = {}
for i = 1, 100 do
local b = newObject()
a.collection[i] = b
a.collection[b] = i
end
发现:
local z = a.collection[99]
if a.collection[z] then return true end
local z = a.collection[99]
if a.collection[z] then return true end
由于某种原因,这对我不起作用,我不会返回真实的。在“键是引用”部分,请确保对表使用相同的引用,而不是重新创建相同的第二个表。由于某些原因,这对我不起作用,我不会返回true。“键是引用”部分,请确保对表使用相同的引用,而不是重新创建相同的第二个表。谢谢!这个解决方案非常完美。谢谢!这个解决方案是完美的。