luaでのテーブルの長さ:#operifier&table.getn()



Length Table Lua



公式文書はそのように説明されています#:
長さ演算子を取り、単項演算#を記述します。文字列の長さは、そのバイト数(つまり、1文字と1バイトの文字列の長さ)です。
テーブルtの長さは、整数の添え字nとして定義されます。さらに、t [n]がnilでなく、t [n + 1]がnilであることが満たされます。さらに、t [1]がnilの場合、nはゼロになる可能性があります。通常の配列の場合、1からnまでのnull以外の値がある場合、その長さは正確にnであり、これは最後の値の添え字です。配列に「穴」がある場合(つまり、nil値がnull以外の値の間に挟まれている場合)、#tは、nil値である前の位置を指す添え字である可能性があります(つまり、nil値はItです。配列の終わりとして扱われる場合があります)。
コードは次のとおりです。

local tblTest2 = { 1, a = 2, 3, } print(table.getn(tblTest2))

このコード出力の結果は何ですか?ここでの出力は2である必要があります。まず、このtblTest2は単純なテーブルではなく、リスト(リスト)とレコード(レコード)の2つのスタイルを混合します。テーブルでは、a = 2がレコードスタイルです。次に、レコードスタイルのレコードは出現の長さとして計算されないことを理解することが重要です。あなたはそれを関数として考えることができます。他のオブジェクト指向言語と同様に、関数は内部変数として記憶されません。
関数のようなものなので、aの値を出力できます。 Print(tblTest2.a)は問題ありません。
次のコードを見てください。



local tblTest3 = { 1, {a = 2}, 3, } print(table.getn(tblTest3))

このコード出力の結果は何ですか?ここでの出力は3になります。テーブルのネストされたテーブル、ネストされたテーブルも要素であることに注意してください。したがって、出力の結果は3になります。
table.getn(t)は#tと同等です。
次の状況はかなり絡み合っています。最後の文の要約を直接見ることができます。
それでは、もっと絡み合ったものを見てみましょう。

local tblTest4 = { 1, nil, } print(table.getn(tblTest4))

このコード出力の結果は何ですか?それは1です。テーブルが長さを取得すると、テーブル全体をトラバースし、最後にnil以外のときに戻ることは誰もが知っています。
しかし、次のコードはどうですか?



local tblTest5 = { 1, nil, 2, } print(table.getn(tblTest5))

出力3、楽しいですか?長さを計算する要素としてnilを取ります。しかし、理解できないことを教えてくれるのは、次のコードです。

local tblTest5 = { 1, nil, 2, nil }

出力1.別の段落を送信します。完全に見逃してしまいます。

local tblTest5 = { 1, nil, 2, nil, 3, nil }

出力3.あなたは盲目でしたか?もう一度見てください、この段落はあなたがもはやテーブルにnil値を書くことをあえてしないことを呼びます:



local tblTest5 = { 1, nil, 2, nil, 3, nil, 4, nil }

見てください。この段落の出力は1です。親愛なる、将来、luaテーブルのnil値をあえて使用できますか? ? ?後ろにnilを追加し続けると、何かが見つかる可能性があります。あなたが見つけたものは規則性であると思うかもしれません。ただし、これが法律であると決して考えるべきではありません。これは間違っているからです。

1、テーブルでnilを使用しないでください
2. nilを使用する場合は、table.setn()関数を使用してテーブルの長さを設定する必要があります。注:新しいバージョンのluaはsetnをサポートしなくなりました。
あなたに結論を与える必要があります:
setn関数は廃止されました。 luaテーブルでnil値を使用しないでください。要素を削除する場合は、直接削除してください。代わりにnilを使用しないでください。