Lua入門学習チュートリアル(一)Table関数ライブラリ


table.concat( tablename, “, “, start_index, end_index )
接続tableの最初のインデックスの連続する複数の例
    local mytable={"this","is","game"}
     
    --      、  index(  1)、  index(  maxn)
    print(table.concat( mytable))					
     
    --     ,     index,  index
    print(table.concat( mytable, "-"))				
     
    --     ,    index,     index
    print(table.concat( mytable, "-",2))
     
    --     ,    index,    index
    print(table.concat( mytable, "-", 1, 2 ))

出力結果
    thisisgame
    this-is-game
    is-game
    this-is

例えば
    local mytable=
    {
    	[1]="a",
    	[2]="b",
     
    	[3]="15",
     
    	[100]="1500",
    	[101]="1501"
    }
     
    print(table.concat( mytable,"-"))

結果出力
a-b-15

table.insert(table, pos, value)
指定した場所に項目を挿入し、指定した場所がない場合は末尾に挿入します.
    local mytable={"is","game"}
     
    table.insert(mytable,"happly")
     
    table.insert(mytable,"play")
     
    table.insert(mytable,1,"this")
     
    print(table.concat( mytable, "-"))

出力結果
this-is-game-happly-play

table.maxn(table)
tableの最大インデックス値の取得
#table
最初の連続インデックスの最大値を取得
たとえば
    local mytable=
    {
    	[1]="a",
    	[2]="b",
     
    	[3]="15",
     
    	[100]="1500",
    	[101]="1501"
    }
     
    print(#mytable)
     
    print(table.maxn(mytable))

出力結果
    3
    101

table.remove(table,pos)
指定した位置の要素を削除し、posが指定されていない場合は、最初の連続インデックスの最後の要素を削除します.注意エレメントが削除されると、後ろのエレメントが前に移動します.
たとえば
    local mytable=
    {
    	[1]="a",
    	[2]="b",
     
    	[3]="15",
     
    	[100]="1500",
    	[101]="1501",
    	m_name="ddddd"
    }
     
    table.remove(mytable)
     
    for k,v in pairs(mytable) do
    	print(k,v)
    end

出力結果
    1	a
    2	b
    m_name	ddddd
    100	1500
    101	1501

posを指定せずにmytable[3]が削除されたことがわかります
例えば
    local mytable=
    {
    	[1]="a",
    	[2]="b",
     
    	[3]="15",
     
    	[100]="1500",
    	[101]="1501",
    	m_name="ddddd"
    }
     
    table.remove(mytable,1)
     
    for k,v in pairs(mytable) do
    	print(k,v)
    end

出力結果
    1	b
    2	15
    m_name	ddddd
    100	1500
    101	1501

mytable[1]を削除すると、後ろの要素が前に移動していることがわかります.
多くの人はmytable[1]=nilのように要素を削除するのに慣れていますが、問題が発生します.mytable[1]=nilですが、連続インデックスが切れています.連続インデックスに対する操作の一部は実行できません.例えば次の例
    local mytable=
    {
    	[1]="a",
    	[2]="b",
     
    	[3]="15",
     
    	[100]="1500",
    	[101]="1501",
    	m_name="ddddd"
    }
     
    mytable[1]=nil
     
    for i,v in ipairs(mytable) do
    	print(i,v)
    end

出力結果は:何もなくて、空いています
連続インデックスでない他の項目については、nilに設定します.たとえば、次のようにします.
    local mytable=
    {
    	[1]="a",
    	[2]="b",
     
    	[3]="15",
     
    	[100]="1500",
    	[101]="1501",
    	m_name="ddddd"
    }
     
    mytable[100]=nil
     
    for k,v in pairs(mytable) do
    	print(k,v)
    end

出力結果
    1	a
    2	b
    3	15
    m_name	ddddd
    101	1501

table.sort( tablename, sortfunction )
tableをソートします.softfunctionソートアルゴリズムを指定しない場合、デフォルトは昇順ソートです.
    local mytable=
    {
    	1,
    	3,
    	4,
    	2
    }
    print("before : " .. table.concat( mytable,"-" ))
     
    table.sort( mytable )
     
    print("after  : " .. table.concat( mytable,"-" ))

出力結果
    before : 1-3-4-2
    after  : 1-2-3-4

ソート関数を自分で指定できます.例えば、ここで降順にソートします.
    local mytable=
    {
    	1,
    	3,
    	4,
    	2
    }
    print("before : " .. table.concat( mytable,"-" ))
     
    table.sort( mytable ,function( var1,var2 )
    	-- body
    	return var1>var2
    end)
     
    print("after  : " .. table.concat( mytable,"-" ))

結果出力
    before : 1-3-4-2
    after  : 4-3-2-1

table.foreachi(mytable,function( i,v ))
インデックス1から始まるアイテムを巡回します.インデックスは数値ではありません.たとえば、
    local mytable=
    {
    	1,
    	[1]="this",
    	3,
    	is="is",
    	4,
    	game="game",
    	2
    }
     
    table.foreachi(mytable,function( k,v )
    	-- body
    	print(k,v)
    end)

結果出力
    1	this
    2	3
    3	4
    4	2

ここで注意:tableのインデックスの同じ値が上書きされますよ
table.foreach(mytable,function( k,v )
すべてのアイテムを巡回します.たとえば
    local mytable=
    {
    	1,
    	[1]="this",
    	3,
    	is="is",
    	4,
    	game="game",
    	2
    }
     
    table.foreach(mytable,function( k,v )
    	-- body
    	print(k,v)
    end)

結果出力
    1	this
    2	3
    3	4
    4	2
    is	is
    game	game