문제는 디자인 선택을 재고해야 할 것입니다. 이 테이블은 n 개의 테이블에 있으며, box
필드에 자식 노드에 대한 참조가있는 트리 그래프와 유사합니다.
의견에 따르면 해당 트리의 동적 경로에있는 노드를 수정해야합니다. 간단한 함수는 분명합니다 :
그러나 왜 동적 경로를 사용하여 노드를 수정해야하는지에 따라보다 견고한 접근 방법이 필요할 수 있습니다.
local index={}
local add_new_box = function(name)
local box = new_box(name)
index[ box.unique_id] = box
return box
end
: 당신은 예를 들어 당신의 상자가 항상 자신의 ID로 액세스 할 수있는 색인 테이블을 만들 수있는와
local new_box
do
local box_count=0
new_box = function(name)
box_count=box_count+1
local box = {
unique_id=box_count,
name=name,
box={}
}
return box
end
end
: 상처 결코 한 가지의 만드는 동안 당신의 상자 고유 식별자의 각을 제공하는 것입니다
또는 허용되지 않는 경우 트리의 노드를 통해 항상 고유 한 값을 가질 수있는 노드를 검색 할 수 있습니다.
하지만 모든 것 : 이미 고유 한 식별자가 있습니다. 주소가 a = {}
일 때 a
에 할당되는 값입니다. 그 차이점과 unique_id
의 유일한 차이점은 다음과 같습니다. 1) a
은 읽기 쉽지 않습니다. 2) a
을 아는 경우 검색 할 필요가 없습니다.
그래서, 당신의 문제를 살펴를 살펴보고 자신에게 물어 :? 을 "이 필요하는 이유는 인덱스의 순서 대신 unique_id
얻을 수에서 오는 경우 이유는 box
자체 대신 unique_id
얻을 수없는 이유는 무엇입니까? "
'local t, n = _G, 4; j = 1, n에 대해 t = t.Box [1] end; t.Name = "Changed" ' –
@EgorSkriptunoff, 이것으로 답을 얻을 수 있습니다. 나는 측정했다;) –
@ PaulKulchenko - 단 한 줄 주석에 딱 들어 맞는다! :-) –