*Luaリファレンス 要注意点 ~配列~ [#a5bdcc78]

**index番号は"1"から [#w28c539c]
-配列はLUAではINDEX==1 から始めます。~
様々な関数が、それを前提とした作りになっていますので、~
強引に「0」から開始したりはせず、素直に「1」からにしましょう。~
~
また、#が配列の長さになりますので、~
#sh(lua){{
a[#a+1] = v
}}
などで、リストの最後に追加というイディオムとなります。~

**配列の0からのインデックス [#x9e81052]
-配列のインデックスを強引に0からにした例
#sh(lua){{
days = { [0] = "Sunday", "Monday", "Tuesday", ..... }
}}
というようにインデックス[0]を書いておけば良い。~
#sh(lua){{
arr = { 1,2,3,[0]=0 }
}}
というように、位置はどこでも良い。~
~
ただし、Luaでは多くの関数が、配列1からのスタートを前提とした設計になっているので、
このようなことは避けたほうが賢明

**配列の間に"nil"がある場合、#による長はあてにならない [#tcf9f4d0]
-配列の要素にnilがあると、#は非常にわかりにくいアルゴリズムとなってしまうため~
まともに使えません。~
配列の要素にnilがある場合は、#やipairsを使わないようにしましょう。
#sh(lua){{
local a = {1,2,3,nil,5,nil}
print(#a) --> 3
local a = {1,2,3,nil,5}
a[4] = nil
print(#a) --> 5
a[6] = nil
print(#a) --> 3
a[6] = 6
print(#a) --> 3

local a = {1,2,3,nil,5,nil}
print(#a) --> 3
a[6] = 6
print(#a) --> 6
a[6] = nil
print(#a) --> 3
a[7] = 7
print(#a) --> 3
}}

というように、理解しがたい値が返ってきます。


**配列の間に"nil"がある場合、ipairsはそこで終了 [#de510679]
-ipairsがnilで終了してしまうことも、引っかかりやすい挙動です。
#sh(lua){{
local a = {1,2,3,nil,5}
for k, v in ipairs(a) do
    print(k, v)
end
-- 1 1
-- 2 2
-- 3 3
}}

**配列が空は、「not next (対象テーブル)」と判定[#w59cbd3a]
>
#sh(lua){{
mytable = {};
if not next mytable then
    print "It's empty"
end
}}
関連項目 => [[table.empty>Lua implements_func_table#table_empty]]
~

トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS