Tables: Difference between revisions
>NecroBumpist Add links to other data structures that can be made with tables under the "See also" section. |
m Text replacement - "<code lua>" to "<SyntaxHighlight code="lua">" Tags: mobile web edit mobile edit |
||
Line 21: | Line 21: | ||
Arrays are created with a pair of braces ({ and }, containing the values to store in the array separated by commas (,) or semicolons (;). The values can be of any type | Arrays are created with a pair of braces ({ and }, containing the values to store in the array separated by commas (,) or semicolons (;). The values can be of any type | ||
<code lua> | <SyntaxHighlight code="lua"> | ||
local myArray = {"A string", 3.14159, Workspace.Part} | local myArray = {"A string", 3.14159, Workspace.Part} | ||
local myEmptyArray = {} | local myEmptyArray = {} | ||
Line 29: | Line 29: | ||
To read from an array, add a pair of brackets ([ and ]) after the array, and put the number of the element you want inside it. The first element in the array is number 1 | To read from an array, add a pair of brackets ([ and ]) after the array, and put the number of the element you want inside it. The first element in the array is number 1 | ||
<code lua> | <SyntaxHighlight code="lua"> | ||
print(myArray[1]) --> A string | print(myArray[1]) --> A string | ||
print(myArray[2]) --> 3.14159 | print(myArray[2]) --> 3.14159 | ||
Line 41: | Line 41: | ||
You can get the length of the array with the # operator: | You can get the length of the array with the # operator: | ||
<code lua> | <SyntaxHighlight code="lua"> | ||
print(#myArray) --> 3 | print(#myArray) --> 3 | ||
print(#myEmptyArray ) --> 0 | print(#myEmptyArray ) --> 0 | ||
Line 53: | Line 53: | ||
=== Creating a dictionary === | === Creating a dictionary === | ||
Once again, dictionaries are created with braces | Once again, dictionaries are created with braces | ||
<code lua> | <SyntaxHighlight code="lua"> | ||
local myDictionary = { | local myDictionary = { | ||
["Roblox"] = "A massively multiplayer online game", | ["Roblox"] = "A massively multiplayer online game", | ||
Line 63: | Line 63: | ||
Like arrays, dictionaries are not restricted to strings. Both the keys and the values can be of any type. | Like arrays, dictionaries are not restricted to strings. Both the keys and the values can be of any type. | ||
<code lua> | <SyntaxHighlight code="lua"> | ||
local playerScores = { | local playerScores = { | ||
[game.Players.Telamon] = "Over 9000!", | [game.Players.Telamon] = "Over 9000!", | ||
Line 75: | Line 75: | ||
If a key in a dictionary is a string, and a valid Lua identifier (that is, it can be used as [[Variables#Names|the name of a variable]]), the quotes and brackets can be omitted: | If a key in a dictionary is a string, and a valid Lua identifier (that is, it can be used as [[Variables#Names|the name of a variable]]), the quotes and brackets can be omitted: | ||
<code lua> | <SyntaxHighlight code="lua"> | ||
local myDictionary = { | local myDictionary = { | ||
Roblox = "A massively multiplayer online game", | Roblox = "A massively multiplayer online game", | ||
Line 87: | Line 87: | ||
Getting values into and out of a table is called ''indexing''. An ''index'' in a table is like a row in the table model above. To index something in a table, you first need the key for the index you want to get or change the value in. You put the key in square brackets ('''[]''') after the table that that is to be looked in. For example, to get or change the index with the key 1 in the table myTable, we write myTable[1]. You can then use this exactly like a [[variable]] or value: it can be used, or set to a different value. For example, to store the string "A value" in myTable in the row with the key 1, we would write: | Getting values into and out of a table is called ''indexing''. An ''index'' in a table is like a row in the table model above. To index something in a table, you first need the key for the index you want to get or change the value in. You put the key in square brackets ('''[]''') after the table that that is to be looked in. For example, to get or change the index with the key 1 in the table myTable, we write myTable[1]. You can then use this exactly like a [[variable]] or value: it can be used, or set to a different value. For example, to store the string "A value" in myTable in the row with the key 1, we would write: | ||
<code lua> | <SyntaxHighlight code="lua"> | ||
myTable = {} | myTable = {} | ||
myTable[1] = "A value" | myTable[1] = "A value" | ||
Line 94: | Line 94: | ||
myTable[1] can now be used in other places. For example, the print function: | myTable[1] can now be used in other places. For example, the print function: | ||
<code lua>print(myTable[1]) --> A value</code> | <SyntaxHighlight code="lua">print(myTable[1]) --> A value</code> | ||
If there is already an index in the table with the key that is being set, the old value will be replaced with the new one: | If there is already an index in the table with the key that is being set, the old value will be replaced with the new one: | ||
<code lua> | <SyntaxHighlight code="lua"> | ||
myTable[1] = "A new value" | myTable[1] = "A new value" | ||
print(myTable[1]) --> A new value (as apposed to "A value") | print(myTable[1]) --> A new value (as apposed to "A value") | ||
Line 105: | Line 105: | ||
If there isn't a row with the key we're using when we try to ''get'' a value, it will return {{nil}}: | If there isn't a row with the key we're using when we try to ''get'' a value, it will return {{nil}}: | ||
<code lua>print(myTable[2]) --> nil</code> | <SyntaxHighlight code="lua">print(myTable[2]) --> nil</code> | ||
== Iteration through tables == | == Iteration through tables == | ||
Line 111: | Line 111: | ||
''Iteration'' is the repetition of an action. In this case, you are iterating through the values in a table by taking each value and doing something with it. For-loops (and sometimes while-loops) are used to iterate with tables. You can use the [[Function_Dump/Core_Functions#pairs_.28t.29|pairs]] (or [[Function_Dump/Core_Functions#ipairs_.28t.29|ipairs]] if you only want to iterate over the number keys) function to write a for-loop that goes through every value in a table with the value's key. | ''Iteration'' is the repetition of an action. In this case, you are iterating through the values in a table by taking each value and doing something with it. For-loops (and sometimes while-loops) are used to iterate with tables. You can use the [[Function_Dump/Core_Functions#pairs_.28t.29|pairs]] (or [[Function_Dump/Core_Functions#ipairs_.28t.29|ipairs]] if you only want to iterate over the number keys) function to write a for-loop that goes through every value in a table with the value's key. | ||
<code lua> | <SyntaxHighlight code="lua"> | ||
for key, value in pairs(myOtherTable) do | for key, value in pairs(myOtherTable) do | ||
print(key, "=", value) | print(key, "=", value) | ||
Line 128: | Line 128: | ||
An important thing to understand when setting more than one variable to the same table is that tables are ''passed by reference''. This means that the variable doesn't directly contain the table itself, but that it holds a ''reference'' (or pointer) to it. This means that when more than one variable is set to a table, the variables ''do not'' each have a copy of the table, they refer to the same table, so any changes will be noticed by ''both'' variables: | An important thing to understand when setting more than one variable to the same table is that tables are ''passed by reference''. This means that the variable doesn't directly contain the table itself, but that it holds a ''reference'' (or pointer) to it. This means that when more than one variable is set to a table, the variables ''do not'' each have a copy of the table, they refer to the same table, so any changes will be noticed by ''both'' variables: | ||
<code lua> | <SyntaxHighlight code="lua"> | ||
var1 = {} | var1 = {} | ||
var2 = var1 | var2 = var1 |
Revision as of 03:58, 27 April 2023
A table is a data type in Lua that is useful to store multiple values, including numbers, strings, functions, more tables, and much more. It is called a table because it acts like a grid with two columns:
Key | Value |
---|---|
The key column is used to find a row in the table, and the value is the value that is stored in that row. Both the key and value can be any Lua value (numbers, strings, Parts etc., and even other tables) except nil. Lua tables do not have to use either numbers, strings or tables as keys. Any combination of key types can be used.
Another way to describe it is that by inputting the key, you receive the value.
The # operator will return the amount of keys that are numbers.
Arrays
An array is a list of values, stored in order. It is a table where the keys are sequential integers starting at 1, e.g. 1, 2, 3, 4. Arrays are useful for creating lists of things, such as a list of players with special permissions.
Creating arrays
Arrays are created with a pair of braces ({ and }, containing the values to store in the array separated by commas (,) or semicolons (;). The values can be of any type <SyntaxHighlight code="lua"> local myArray = {"A string", 3.14159, Workspace.Part} local myEmptyArray = {}
Reading from and writing to arrays
To read from an array, add a pair of brackets ([ and ]) after the array, and put the number of the element you want inside it. The first element in the array is number 1 <SyntaxHighlight code="lua"> print(myArray[1]) --> A string print(myArray[2]) --> 3.14159 print(myArray[3]:GetFullName()) --> Workspace.Part
myArray[2] = "Pi" print(myArray[2]) --> Pi
More information
You can get the length of the array with the # operator: <SyntaxHighlight code="lua"> print(#myArray) --> 3 print(#myEmptyArray ) --> 0
Lua's table manipulation functions allow you to easily do things such as add and remove values from an array.
Dictionaries
Dictionaries are an extension of arrays. While an array stores an ordered list of items, a dictionary stores a set of key/value pairs. For example, in a real dictionary, the "keys" are the words, and the "values" the definition.
Creating a dictionary
Once again, dictionaries are created with braces <SyntaxHighlight code="lua"> local myDictionary = { ["Roblox"] = "A massively multiplayer online game", ["Wiki"] = "A Web site developed collaboratively by a community of users", ["Lua"] = "A lightweight multi-paradigm programming language" }
Like arrays, dictionaries are not restricted to strings. Both the keys and the values can be of any type.
<SyntaxHighlight code="lua"> local playerScores = { [game.Players.Telamon] = "Over 9000!", [game.Players.ROBLOX] = 1337, [game.Players.Sorcus] = Enum.DialogTone.Enemy }
Shorthand for string keys
If a key in a dictionary is a string, and a valid Lua identifier (that is, it can be used as the name of a variable), the quotes and brackets can be omitted:
<SyntaxHighlight code="lua"> local myDictionary = { Roblox = "A massively multiplayer online game", Wiki = "A Web site developed collaboratively by a community of users", Lua = "A lightweight multi-paradigm programming language" }
Indexing a dictionary
Getting values into and out of a table is called indexing. An index in a table is like a row in the table model above. To index something in a table, you first need the key for the index you want to get or change the value in. You put the key in square brackets ([]) after the table that that is to be looked in. For example, to get or change the index with the key 1 in the table myTable, we write myTable[1]. You can then use this exactly like a variable or value: it can be used, or set to a different value. For example, to store the string "A value" in myTable in the row with the key 1, we would write:
<SyntaxHighlight code="lua"> myTable = {} myTable[1] = "A value"
myTable[1] can now be used in other places. For example, the print function:
<SyntaxHighlight code="lua">print(myTable[1]) --> A value
If there is already an index in the table with the key that is being set, the old value will be replaced with the new one:
<SyntaxHighlight code="lua"> myTable[1] = "A new value" print(myTable[1]) --> A new value (as apposed to "A value")
If there isn't a row with the key we're using when we try to get a value, it will return nil:
<SyntaxHighlight code="lua">print(myTable[2]) --> nil
Iteration through tables
Iteration is the repetition of an action. In this case, you are iterating through the values in a table by taking each value and doing something with it. For-loops (and sometimes while-loops) are used to iterate with tables. You can use the pairs (or ipairs if you only want to iterate over the number keys) function to write a for-loop that goes through every value in a table with the value's key.
<SyntaxHighlight code="lua"> for key, value in pairs(myOtherTable) do print(key, "=", value) end
--[[ Output: 1 = A value A string key = Another value 2 = 5 ]]
Pass by reference
An important thing to understand when setting more than one variable to the same table is that tables are passed by reference. This means that the variable doesn't directly contain the table itself, but that it holds a reference (or pointer) to it. This means that when more than one variable is set to a table, the variables do not each have a copy of the table, they refer to the same table, so any changes will be noticed by both variables:
<SyntaxHighlight code="lua"> var1 = {} var2 = var1 var2["key"] = "value" print(var1["key"]) -- prints "value" because var2 had pointed to var1's value (the table)
See also
- Metatables
- From Programming in Lua:
- Tables Tutorial on Lua Users wiki
- Using Tables to create data structures: