1. ホーム
  2. スクリプト・コラム
  3. ルア

LuaのTableデータ構造を例題を交えて解説

2022-02-10 20:18:13

本文中 - 横2行で1行のコメント開始、- [[プラス2つの[and]で複数行のコメントを示す-]]。    

コピーコード コードは以下の通りです。
-- Table = Lua's only data structure;
-- They are associative arrays.
-- similar to arrays in PHP or objects in js.
-- They are hash lookup tables (dict), which can also be used by list.

コピーコード コードは以下の通りです。
-- Using Table in a dictionary/map fashion.

-- Dict's iteration defaults to using a key of type string.
t = {key1 = 'value1', key2 = false}

コピーコード コードは以下の通りです。
-- String's key can be referenced with a dot like js:.
print(t.key1) -- prints 'value1'.
t.newKey = {} -- Add a new key/value pair.
t.key2 = nil -- Remove key2 from table.

コピーコード コードは以下の通りです。
-- Use any value that is not nil as the key.
u = {['@! #'] = 'qbert', [{}] = 1729, [6.28] = 'tau'}
print(u[6.28]) -- prints "tau"

コピーコード コードは以下の通りです。
-- For numbers and strings the key is matched by value, but for table it is matched by id.
a = u['@! #'] -- now a = 'qbert'.
b = u[{}] -- We were expecting 1729, but got nil:
-- b = nil, because it wasn't found.
-- is not found because the key we used is not the same object we used to save the data.
-- so strings and numbers are better keys for availability.

コピーコード コードは以下の通りです。
-- function calls that take only one table parameter do not require parentheses: the
function h(x) print(x.key1) end
h{key1 = 'Sonmi~451'} -- prints 'Sonmi~451'.

コピーコード コードは以下の通りです。
for key, val in pairs(u) do -- Traversal of Table.
  print(key, val)
end

コピーコード コードは以下の通りです。
-- _G is a special table that holds all the global variables
print(_G['_G'] == _G) -- prints 'true'.

コピーコード コードは以下の通りです。
-- Using by list/array.

-- The iterative approach to list implicitly adds the key of int.
v = {'value1', 'value2', 1.21, 'gigawatts'}
for i = 1, #v do -- #v is the size of the list
  print(v[i]) -- index starts at 1!!! That's crazy!
end
-- 'list' is not really a type, v is still a table, and
-- except that it has consecutive integers as keys that can be used like a list.