2014-09-11 3 views
1

클래스에서 객체를 만들고 나중에 반복하고 싶습니다. 이보다 효율적인 방법이 있습니까?클래스의 객체를 반복합니다.

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) 

개체를 생성자의 개체 테이블에 삽입하는 것보다 개체를 반복하는 것이 더 효율적입니까?

+0

나는이 예제에서 나쁜 방법이라고 생각하지만, 문제를 이해할 수 있도록 – Sempie

+0

왜 현재 방법이 효율적이지 않다고 생각하십니까? –

+0

그런 식으로하는 것이 좋지 않다고 생각합니다. 이유를 모르겠습니다. – Sempie

답변

1

사용하는 방법은 class1의 각 인스턴스를 objects이라는 테이블에 삽입하는 것입니다. class1의 모든 인스턴스를 반복하려는 경우 (예 : for 루프를 사용하여 각 인스턴스에서 /와 함께 작업 할 경우), 선택할 필요가 없습니다. 인스턴스를 테이블에 저장해야합니다.

다음 질문은 해당 테이블이있는 위치가 성능에 어떤 영향을 미치는지입니다. 루아에서는 지역 액세스 (및 상위 값)가 전역 액세스보다 약간 성능이 좋지만 차이점이 전역 변수로 무엇을해야하는지에 달려 있으며 반복의 경우에는 되풀이. 예를 들어 Optimizing Using Local Variables을 참조하십시오.

모든 경우에 반복 루프 본문의 작업으로 인해 테이블이 로컬 대 글로벌 사이에 아무런 차이가 없습니다. 당신은 What can I do to increase the performance of a Lua program?보고 싶을 수도 있지만, 가장 중요한 것은, 단지

  • 프로파일에 따라 최적화 : os.clock를 사용하고 PepperFish 같은 가능성이 뭔가 -주의의 위험 부담 : 나는 그것을 시도하지 않았습니다.
  • "사운드 디자인"원칙 : 신중하게 컨테이너 및 알고리즘을 선택하십시오. 예를 들어 디자인에 신중하지 않으면 O (N^N) 대신 O (N^2)를 얻을 수 있습니다. 마찬가지로 O O (N) 대신 O (N) 또는 O (1) 대신 O (N)을 사용하는 것이 좋습니다.
관련 문제