このような問題は、おそらくデザインの選択肢を再考する必要があります。そのテーブルを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
がわかっている場合は、検索する必要はありません。
だから、あなたの問題を見て見てみると、自分自身に尋ねる:??? 「この必要性はどこから来るのか、なぜ私はなぜ私はbox
自体の代わりunique_id
を得ることができないインデックスのunique_id
代わりにシーケンスを取得することはできませんか"
'local t、n = _G、4; j = 1の場合、n do t = t.Box [1] end; t.Name = "Changed" ' –
@EgorSkriptunoff、これで答えは十分です。私は測定しました;) –
@PaulKulchenko - しかし、それは一行コメントにうまく収まります! :-) –