[解決済み] Luaでネストしたテーブルと数値キー
質問
数値インデックスの関係で可能かどうかわかりませんが、どなたかご教示いただければ幸いです。
の表があるとする。
t = { 13, 200, 12, 15, 23 }
数字を使ったテーブルのネストはどうすればいいのですか?
t["200"] = {"stuff", "more stuff", "even more stuff"}
はうまくいかないようです。ポジション200が作成され、空のセルがnullで埋め尽くされてしまうからです。 サフィックスやプレフィックスとして文字を追加するのですが、問題は、テーブルを数値でソートしようとすることです。 これは可能なのでしょうか、それとも別の方法に行き詰まったのでしょうか? ありがとうございます。
気が付いたので少し編集。
t["200"] = {"stuff", "more stuff", "even more stuff"}
は、実際には "200" のキーを作成するのに対し。
t[200] = {"stuff", "more stuff", "even more stuff"}
はインデックス 200 を作成し、他のすべてを null にします。
解決方法は?
まず、DeadMGの言う通り、数値インデックスではなく文字列を使用しています。しかし、仮に数値のインデックスを使用したとしても、それは役に立ちません。
こうすれば
someTable = {"value1", "value2", {"value3a", "value3b"}};
someTable[50] = {"value50a", "value50b"};
テーブルの長さです。
#someTable
になるのですが、それでも
3
. なぜか?Luaは連続した要素に基づいてテーブルで配列を定義しているからです。覚えておいて欲しいのは、どのテーブルのどの要素にもアクセスできることです。
nil
実際の値を与えるまで
Luaでは、テーブルの長さを、数値インデックス1から数えて、最初の
nil
の値です。このため
someTable[4]
がnilの場合、長さは3です。
配列テーブルの最後に新しい要素を挿入したい場合、このようにします。
someTable[#someTable + 1] = "newValue";
値はそれ自体がテーブルであってもよい。
someTable[#someTable + 1] = {"newValuea", "newValueb"};
ネストしたテーブルにアクセスする方法だけを聞いているのであれば、それは簡単なことで、使用するキーとは関係ありません。
ネストされたテーブルについては、何も特別なことはありません。テーブルは値であり、テーブルのエントリーは他のテーブルも含め、どんな値でも構いません。
テーブルがあり、その中の配列のエントリーをウォークしたい場合は、これを使います。
local aTable = {"first", "second", "third", ...}
for i, value in ipairs(aTable) do
--`value` contains the entries in the table.
end
ネストされたテーブルも同様で、単にテーブルを取得するだけです。
local nestedTable = { "first", "second", "third", ...}.
nestedTable[#nestedTable + 1] = {"newFirst", "newSecond", ...} となります。
local aTable = nestedTable[#nestedTable];
for i, value in ipairs(aTable) do
--
value
はテーブルのエントリを含んでいます。
終了
または、次のようにすることもできます。
ipairs(nestedTable[#nestedTable])
. ここで使われている特定のキー(整数値)が
全く重要ではありません
. そのキーは、文字列、浮動小数点数、別のテーブル、ユーザーデータなどであったかもしれません。それは重要ではありません。
また
ipairs
なぜなら、テーブルの配列のメンバーに対してのみ反復処理を行いたいからです。配列の長さは上で定義したとおりです。もしテーブルのすべてのメンバーに対してループ処理を行いたい場合は
pairs
の代わりに
ipairs
. もちろん
pairs
は順不同の検索を行うので、配列順であることが保証されているわけではありません。
ネストされたテーブルのすべての要素を再帰的に検索したい場合、このようにすることができます。
local function RecursiveSearch(aTable)
for key, value in pairs(aTable) do --unordered search
if(type(value) == "table") do
RecursiveSearch(value)
else
--Do something with this.
end
end
end
テーブルが循環参照を持つことが可能なため、上記は無限ループになることに注意してください。
local tableA = {}
local tableB = {tableA}
local tableA[1] = tableB
RecursiveSearch(tableA) --Infinite loop.
関連
-
[解決済み] LUA がグローバルな nil 値のインデックスを作成しようとした
-
[解決済み] nil と文字列の連結を試みる Roblox
-
[解決済み] Luaのテーブルが空かどうかを判断する最も効率的な方法は?
-
[解決済み] 何をするのか? for i=1,select('#',...)
-
[解決済み] テーブルをコンソールにダンプするには?
-
[解決済み] JavaScript のネストしたオブジェクトや配列に文字列パスでアクセスする
-
[解決済み】ネストされたJavaScriptオブジェクトのキーが存在するかどうかをテストする
-
[解決済み】Luaの文字列をintに変換する
-
[解決済み】Luaの.と:の違いについて
-
[解決済み] Luaの配列(テーブル)はなぜ0ではなく1から始まるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] nil と文字列の連結を試みる Roblox
-
[解決済み] "Unable to cast value to Object" エラーメッセージ
-
[解決済み] WoW Lua - 1.13でスペルランクを取得する方法 (クラシック)
-
[解決済み] 何をするのか? for i=1,select('#',...)
-
lua loadlib 関数がグローバルな 'loadlib' (nil 値) を呼び出そうとする
-
グローバルな 'setmetatable' (nil 値) または同様のものを呼び出そうとすると、lua がエラーを報告する。
-
Lua5.3の落とし穴
-
[解決済み] Luaはstdoutをコンソールウィンドウにリダイレクトします。
-
[解決済み] Luaでテーブルが要素を含んでいるかどうかを確認するには?
-
[解決済み] テーブルをコンソールにダンプするには?