luaのtableと#とnil凌乱の組み合わせ

1649 ワード

前に書く
luaはunity 3 dフロントエンド開発でよく使われる言語で、軽量やホットアップデートの特性が人気なので、求人情報にも「luaを優先する」という文字がよく見られます.やむを得ず、深夜に教程をやめた.しかし...tableの長さの問題は私を悩ませた.
ピット1:recordモードの項目は長さに計上されません
どういう意味ですか.次の表を見てください.
table1 = {
    "1",
     a = "2",
     "3"
}
print(#table1)

Emmmm、出力の長さは2で、驚きません!従来、tableの項目はlist(リスト)スタイルとrecord(レコード)スタイルに分けられ、table 1の「1」「3」はlistスタイルであり、a=「2」はレコードスタイルである.したがって、#tableは2つの長さしか計算されません.同様に、次の2つのtableの#出力も0
table2={a="1",b="2",c="3"}
print(#table2)  --[[   0]]
table3 = {}
table3["1"] = "1"
table3["2"] = "2"
print(#table3) --[[   0]]

次のtableは特殊で、tableにはtableがネストされています.
table4 = {
    "1",
    {a="2"},
    "3"
}
print(#table4)  --[[   3]]

ネストされたテーブル{a="2"}は要素として扱われ、長さが計上されるため、出力は3
ピットポイント2:深いピットはtableでnilを使用する
今回はまず次のコードを貼ります
t1 = {nil}
t2 = {1,nil,2}
t3 = {1,nil,2,nil}
t4 = {1,nil,2,nil,3}
t5 = {1,nil,2,nil,3,nil}
t6 = {1,nil,2,nil,3,nil,nil}
print(#t1,#t2,#t3,#t4,#t5,#t6)
--[[0   3   1   5    3    5]]

出力結果もコードの最後に置いてありますが、見ているとミスホール(interesting)だと思いませんか...結論は
tableでnilを使わないで!
tableでnilを使わないで!!
tableでnilを使わないで!!!
では、tableの値をどのように削除しますか?じゃあそのままremoveしましょう~
ps:tableの中に変なものを保存しなければならないという仲間がいます.そして、tableの長さを取得しなければなりません.emmmm、いいでしょう.あなたはいたずらをして勝って、反復器でこの長さを取得する方法を提供します.
function table_leng(t)
  local leng=0
  for k, v in pairs(t) do
    leng=leng+1
  end
  return leng;
end

以上のコードにより,pairs反復器によりtableの真の長さ~長さを取得するまで遍歴することができ,本当にわがままである.