テーブル操作

テーブル操作

 テーブル(連想配列)となっています。

 使用法は、まず 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のソートのサンプルの実行結果です。



コメント(最大10行)
名前:
コメント

すべてのコメントを見る



タグ:

+ タグ編集
  • タグ:
最終更新:2012年04月09日 23:49
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。