Difference between revisions of "Basic lua: Tables"
From The Official Visionaire Studio: Adventure Game Engine Wiki
Line 195: | Line 195: | ||
==== Keyword Tables ==== | ==== Keyword Tables ==== | ||
− | <syntaxhighlight lang="lua"> | + | |
− | local t = {} -- | + | {| class="ts" |
− | t[" | + | |- |
− | </syntaxhighlight> | + | ! append a value to the end of the specified table (index tables only) !! |
+ | |- | ||
+ | | style="max-width:680px;" | <syntaxhighlight lang="lua"> | ||
+ | local t = { | ||
+ | |||
+ | ["one"] = 1, | ||
+ | ["three"] = 3 | ||
+ | |||
+ | } | ||
+ | |||
+ | local str = "" -- init str variable | ||
+ | for k, v in pairs(t) do str = (str .. v .. " ") end -- concatenate data | ||
+ | print("before: " .. str) | ||
+ | |||
+ | t["two"] = 2 -- insert key "two" along with a value into the t table | ||
+ | |||
+ | str = "" -- reset str | ||
+ | for k, v in pairs(t) do str = (str .. v .. " ") end -- concatenate data | ||
+ | print("after: " .. str) | ||
+ | </syntaxhighlight> || width="180px" style="vertical-align:middle;" | [[File:Basic_lua_(tables)_11.png|frameless|center|180px]] | ||
+ | |} | ||
<hr> | <hr> | ||
{| class="ts" | {| class="ts" |
Revision as of 20:12, 3 September 2022
< | Index | > |
Tables are one of the features of Lua script, that make the scripting language so dynamic & easy to use, as they allow us to easily create tables, insert, remove & sort data. Tables are often comprised of arrays that usually involve keywords - or an index number - & a value. Tables can be accessed using multiple different methods.
Creating Tables
Below I am going to show you how to create various different types of tables/arrays.
Index Tables
method 1: automatically generated index values | |
---|---|
local t = {1, 2, 3, 4, 5, "six", 7, "ate", 9} -- automatically assigns an index number to each value starting from 1
local str = "" -- empty string
for i = 1, #t do -- for 1 to table total, print value of index number
str = str .. t[i] -- add current table index value to existing text data in the str variable
if i < #t then str = str .. ", " end -- if i is less than table entry total then insert ", " into the str variable
end
print("table data: " .. str) -- print the table data
print( "table entry total: " .. #(t) ) -- print total of table entries
|
method 2: manually created index values | |
---|---|
local t = {
[1] = 1,
[2] = "two",
[3] = 3,
[4] = 2 * 2,
[5] = "five",
}
local str = "" -- empty string
for i = 1, #t do -- for 1 to table total, print value of index number
str = str .. t[i] -- add current table index value to existing text data in the str variable
if i < #t then str = str .. ", " end -- if i is less than table entry total then insert ", " into the str variable
end
print("table data: " .. str) -- print the table data
print( "table entry total: " .. #(t) ) -- print total of table entries
|
Keyword Tables
keywords & values | |
---|---|
local t = {
["hello world"] = "hello world",
example = "this also works",
camelCaseExample = "this will also work",
snake_case_example = "as will this"
}
for k, v in pairs(t) do
print(k ..": " .. v)
end
print("\n...but as you can see it does not necessarily return them in the order they were created")
|
Index Values and Sub-Arrays
auto generated index entries with sub-arrays containing keywords | |
---|---|
local t = {
{x = 100, y = 300},
{x = 200, y = 111}
}
print("x = " .. t[1].x .. ", y = " .. t[1].y)
|
Keywords and Sub-Arrays
keyword tables with index based sub-arrays containing keywords | |
---|---|
local t_texts = {
["English"] = {
{txt = "hello world!"},
{txt = "goodbye world!"}
},
["German"] = {
{txt = "hallo welt!"},
{txt = "auf wiedersehen welt"}
}
}
print( t_texts["English"][1].txt )
|
Advanced Methods and Table Functions
Below are various table functions & advanced methods for interacting with tables.
Table Concatenation
table concatenation without any formatting (index tables only) | |
---|---|
local t = {1, 2, 3, 4}
print( table.concat(t) )
|
table concatenation with formatting (index tables only) | |
---|---|
local t = {1, 2, 3, 4}
print( table.concat(t, ", ") )
|
table concatenation with formatting & specified table index range (index tables only) | |
---|---|
local t = {1, 2, 3, 4}
print( table.concat(t, ", ", 2, 4) )
|
Table Insert
insert a value into index position 2 in the specified table (index tables only) | |
---|---|
local t = {"one", "three"}
print("before: " .. table.concat(t, ", ") )
table.insert(t, 2, "two") -- insert "two" into index position 2
print("after: " .. table.concat(t, ", ") )
|
append a value to the end of the specified table (index tables only) | |
---|---|
local t = {"one", "two", "three"}
print("before: " .. table.concat(t, ", ") )
table.insert(t, "four") -- insert "four" at the end of the table
print("after: " .. table.concat(t, ", ") )
|
Keyword Tables
append a value to the end of the specified table (index tables only) | |
---|---|
local t = {
["one"] = 1,
["three"] = 3
}
local str = "" -- init str variable
for k, v in pairs(t) do str = (str .. v .. " ") end -- concatenate data
print("before: " .. str)
t["two"] = 2 -- insert key "two" along with a value into the t table
str = "" -- reset str
for k, v in pairs(t) do str = (str .. v .. " ") end -- concatenate data
print("after: " .. str)
|
Quick note: Technically it's possible to mix & match keyword & index tables, but it's cleaner & less confusing all around if you don't. However feel free to use index values inside of sub-arrays if you don't want to use keywords, or keywords in sub-arrays of index tables. |
Table Remove
Index Tables
local t = {1, 2, 3, 4}
table.remove(t, 3) -- table would now contain 1, 2, 4
Keyword Tables
local t = {
["one"] = 1, ["two"] = 2, ["three"] = 3
}
t["two"] = nil -- remove keyword from table by setting it as nil </syntaxhighlight>
Table Sort
< | Index | > |