通过类的迭代遍历对象
问题描述:
我从一个类创建对象,并希望稍后迭代它们。有没有比这更有效的方法?通过类的迭代遍历对象
class1 = {}
class1.value1 = "1"
class1.value2 = 2
class1.tvalue1 = {}
function class1:new()
local class = self
local object = {}
setmetatable(object,class)
class.__index = class
object.tvalue1 = {}
table.insert(objects, object) -- to iterate them later, stupid way I think
return object
end
function class1:alterValue1(input)
self.value1 = input
return self.value1
end
function class1:alterValue2(input)
self.value2 = input
return self.value2
end
randomName = class1:new()
otherName = class1:new()
weirdoName = class1:new()
.
.
.
(n)
是否有一个更有效的方法来迭代对象,而不是将它们插入到构造函数中的某种对象表中?
答
您使用的方法是将class1
的每个“实例”插入名为objects
的表中。如果要遍历class1
的所有实例,即使用for
循环对每个实例使用/进行操作,那么您没有选择,必须将实例存储在表中,就像您在做的那样。
接下来的问题是,该表是否存在对表现有影响?在Lua中,本地人(和upvalues)的访问比访问全局变量的性能稍微好一点,但是差异是否取决于你需要怎么处理全局变量,在迭代的情况下,你在本体迭代。例如参见Optimizing Using Local Variables。
在极有可能的情况下,迭代循环体中的操作将会产生任何影响(在您的表是局部还是全局之间)无关紧要。你可能想看看What can I do to increase the performance of a Lua program?,但最重要的,只有基础上优化
- 分析:使用
os.clock
,并可能像PepperFish - 买者自负:我还没有尝试过。 - “声音设计”原则:仔细选择你的容器和算法,例如,如果你不注意你的设计,你可以得到O(N^2)而不是O(N log N),同样O(N log N)而不是O(log N),或者O(N)而不是O(1)等。
我知道,在这个例子中思想被命名为坏方法,但它只是一个例子,你应该解决这个问题。 – Sempie 2014-09-11 06:14:27
你为什么认为目前的方法效率不高? – 2014-09-11 06:16:54
这样做只是感觉不好,......不知道为什么。 – Sempie 2014-09-11 06:18:04