テーブル操作
テーブル(連想配列)となっています。
使用法は、まず table = {} のように変数に空の連想配列を代入する必要があります。
しかし、値を一気に代入することもできます。 例えば、table = {"a", "b", "c"} と書くことができます。
配列のインデックスは、1から始まります。
一般的な使用法は
a_table = {} -- 配列の宣言
a_table[1] = "a" -- 配列への代入
a_table[2] = "b" -- 配列への代入
a_table[3] = "c" -- 配列への代入
とか、
a_table = {} -- 配列の宣言
a_table = { "a", "b", "c"} -- 配列への代入
となります。
tebleの区切り文字と連結した文字列を返すのは、table.concat (table [, sep [, i [, j]]])。sep:デフォルト値は空文字列 i :デフォルト値は1、 j:テーブルの長さ
a_table = {"1","2","3"} -- 配列
a_txt = table.concat(a_table,",") -- abc_tableを,で区切る abc_txtは1,2,3
tableへのデータ追加は、table.insert (table, [pos,] value)。pos:位置 value:要素
table の位置 pos に要素 value を挿入します。posがないときは一番後ろに挿入します。
a_table = {"a"} -- abc_table[1] = "a"
table.insert(a_table, "b") -- abc_table[2] = "b"
table.insert(a_table, "c") -- abc_table[3] = "c"
table.insert(a_table, 2, "d") -- 2つ目にdを挿入 結果a,d,b,c
テーブルに含まれている要素数は、table.maxn (table)。
a_table = { 1, 2, 3}
total = table.maxn(a_table) -- totalは3
a_table = { "a", "b", "c", "d", "e"}
total = table.maxn(a_table) -- totalは5
tableのデータ削除は、table.remove (table [, pos])。pos:位置
table から位置 pos の要素を取り除きます。
a_table = { 1, 2, 3, 4, 5}
table.remove (a_table, 2) -- 配列の中身は1,2,3,4,5 その2つ目を削除。結果1,3,4,5
tableのソートは、table.sort (table [, comp])。comp がない場合は "<" 。
指定された順序で その場でソートする。そのため、配列の位置が変化する場合があります。
a_table = { 3, 1, 2}
table.sort(a_table) -- a_tableの中身は1,2,3
a_table = { "a", "c", "d", "b", "e"}
table.sort(a_table) -- a_tableの中身はa,b,c,d,e
テーブルの関数を使用したサンプルプログラム
------------------------------------------
-- テーブルのサンプル table_sample.lua
------------------------------------------
function main()
C_Black = color( 0, 0, 0) -- 黒(ブラック)
C_White = color(255, 255, 255) -- 白(ホワイト)
canvas.drawCls(C_White)
canvas.drawText("テーブルのサンプル", 0, 0, 24, C_Black)
canvas.drawText("画面タッチで次のサンプルに進みます。", 10, 280, 24, C_Black)
touch(3)
-- 普通の使用のサンプル
a_table = {} -- 配列の宣言
a_table[1] = "a" -- 配列への代入
a_table[2] = "b" -- 配列への代入
a_table[3] = "c" -- 配列への代入
canvas.drawCls(C_White)
canvas.drawText("テーブルのサンプル", 0, 0, 24, C_Black)
canvas.drawText("普通の使用のサンプル", 0, 24, 24, C_Black)
for i, value in pairs(a_table) do
canvas.drawText( i .. ":" .. value, 0, 50 + 24 * i, 24, C_Black)
end
canvas.drawText("画面タッチで次のサンプルに進みます。", 10, 280, 24, C_Black)
touch(3)
-- table.concat
b1_table = { 1, 2, 3} -- 配列への代入
b1_txt = table.concat(b1_table,",") -- abc_tableを,で区切る abc_txtは1,2,3
b2 = { "ABC", "TEST", "Lua", "Luarida" }
b2_txt = table.concat(b2, ";") -- s = "ABC;TEST;Lua;Luarida"
canvas.drawCls(C_White)
canvas.drawText("テーブルのサンプル", 0, 0, 24, C_Black)
canvas.drawText( b1_txt, 0, 24, 24, C_Black)
canvas.drawText( b2_txt, 0, 48, 24, C_Black)
canvas.drawText("画面タッチで次のサンプルに進みます。", 10, 280, 24, C_Black)
touch(3)
-- tableへのデータ追加のサンプル
c_table = {} -- 配列の宣言
c_table = {"a"} -- abc_table[1] = "a"
table.insert(c_table, "b") -- abc_table[2] = "b"
table.insert(c_table, "c") -- abc_table[3] = "c"
table.insert(c_table, 2, "d") -- 2つ目にdを挿入 結果a,d,b,c
canvas.drawCls(C_White)
canvas.drawText("テーブルのサンプル", 0, 0, 24, C_Black)
canvas.drawText("tableへのデータ追加のサンプル", 0, 24, 24, C_Black)
for i, value in pairs(c_table) do
canvas.drawText( i .. ":" .. value, 0, 50 + 24 * i, 24, C_Black)
end
canvas.drawText("画面タッチで次のサンプルに進みます。", 10, 280, 24, C_Black)
touch(3)
-- テーブルに含まれている要素数のサンプル
d1_table = { 1, 2, 3}
d1_total = table.maxn(d1_table) -- abc_totalは3
d2_table = { "a", "b", "c", "d", "e"}
d2_total = table.maxn(d2_table) -- def_totalは5
canvas.drawCls(C_White)
canvas.drawText("テーブルのサンプル", 0, 0, 24, C_Black)
canvas.drawText("テーブルに含まれている要素数のサンプル", 0, 24, 24, C_Black)
canvas.drawText( d1_total, 0, 50 + 24, 24, C_Black)
canvas.drawText( d2_total, 0, 50 + 24 * 2, 24, C_Black)
canvas.drawText("画面タッチで次のサンプルに進みます。", 10, 280, 24, C_Black)
touch(3)
-- tableのデータ削除のサンプル
e_table = { 1, 2, 3, 4, 5}
table.remove (e_table, 2) -- 配列の中身は1,2,3,4,5 その2つ目を削除。結果1,3,4,5
canvas.drawCls(C_White)
canvas.drawText("テーブルのサンプル", 0, 0, 24, C_Black)
canvas.drawText("tableのデータ削除のサンプル", 0, 24, 24, C_Black)
for i, value in pairs(e_table) do
canvas.drawText( i .. ":" .. value, 0, 50 + 24 * i, 24, C_Black)
end
canvas.drawText("画面タッチで次のサンプルに進みます。", 10, 280, 24, C_Black)
touch(3)
-- tableのソートのサンプル
f1_table = { 3, 1, 2}
table.sort(f1_table) -- abc_tableの中身は1,2,3
f2_table = { "a", "c", "d", "b", "e"}
table.sort(f2_table) -- def_tableの中身はa,b,c,d,e
canvas.drawCls(C_White)
canvas.drawText("テーブルのサンプル", 0, 0, 24, C_Black)
canvas.drawText("tableのソートのサンプル", 0, 24, 24, C_Black)
for i, value in pairs(f1_table) do
canvas.drawText( i .. ":" .. value, 0, 50 + 24 * i, 24, C_Black)
end
for i, value in pairs(f2_table) do
canvas.drawText( i .. ":" .. value, 0, 50 + 24 * 3 + 24 * i, 24, C_Black)
end
canvas.drawText("すべてのサンプルの表示が終了しました。", 10, 280, 24, C_Black)
canvas.drawText("画面タッチで終了します。", 10, 280 + 24, 24, C_Black)
touch(3)
end
main()
1.tableのサンプルの実行結果です。
2.普通の使用のサンプルの実行結果です。
3.table.concatのサンプルの実行結果です。
4.tableへのデータ追加のサンプルの実行結果です。
5.テーブルに含まれている要素数のサンプルの実行結果です。
6.tableのデータ削除のサンプルの実行結果です。
7.tableのソートのサンプルの実行結果です。
最終更新:2012年04月09日 23:49