官术网_书友最值得收藏!

Tables

Tables are the proprietary data structure in Lua. They represent arrays, lists, sets, records, graphs, an so on. A table in Lua is similar to an associative array. Associative arrays can be indexed with values of any type, not just numbers. Tables implement all these structures efficiently. For example, arrays can be implemented by indexing tables with integers. Arrays do not have a fixed size, but grow as needed. When initializing an array, its size is defined indirectly.

The following is an example of how tables can be constructed:

1 a = {}    -- create a table with reference to "a"
2 b = "y"
3 a[b] = 10    -- new entry, with key="b" and value=10
4 a[20] = "Monday"  -- new entry, with key=20 and value="Monday"
5 print(a["y"])    -- 10
6 b = 20
7 print(a[b])     -- "Monday"
8 c = "hello"     -- new value assigned to "hello" property
9 print( c )    -- "hello"

You will notice in line 5 that a["y"] is indexing the value from line 3. In line 7, a[b] uses a new value of variable b and indexes the value of 20 to the string, "Monday". The last line, c is different from the previous variables and its only value is the string, "hello".

Passing a table as an array

Keys of a table can be consecutive integers, starting at 1. They can be made into an array (or a list).

colors =  {
[1] = "Green", 
[2] = "Blue", 
[3] = "Yellow", 
[4] ="Orange", 
[5] = "Red"
}
print(colors[4]) -- Orange

Another way of writing table constructors to build arrays in a faster and convenient way that doesn't require writing out each integer key is as follows:

colors = {"Green", "Blue", "Yellow", "Orange", "Red"}
print(colors[4]) -- Orange

Altering contents in a table

While working with tables, you can modify or remove the values already in it, and also add new values to it. This can be accomplished using the assignment statement. The following example creates a table with three people and their favorite type of drink. You can make an assignment to change one person's drink, add a new person-drink pair to the table, and remove an existing person-drink pair.

drinks = {Jim = "orange juice", Matt = "soda", Jackie = "milk"}
drinks.Jackie = "lemonade" -- A change.
drinks.Anne = "water" -- An addition.
drinks.Jim = nil -- A removal.
print(drinks.Jackie, drinks.Anne, drinks.Matt, drinks.Jim)
-- lemonade water soda nil

drinks.Jackie = "lemonade" overwrites the original value of drinks.Jackie = "milk".

drinks.Anne = "water" adds a new key and value to the table. The value of drinks.Anne before this line would have been nil.

drinks.Matt = "soda" stays the same since there were no alterations to it.

drinks.Jim = nil overwrites the original value of drinks.Jim = "orange juice" with nil. It removes the key Jim from the table.

Populating a table

Ways to populate a table is to start with an empty table and add things to it one at a time. We'll be using constructors, which are expressions that create and initialize tables. The simplest constructor is the empty constructor, {}.

myNumbers = {} -- Empty table constructor

for i = 1, 5 do
  myNumbers[i] = i 
end

for i = 1, 5 do
print("This is number " .. myNumbers[i])
end

The following is the result from the terminal:

--This is number 1
--This is number 2
--This is number 3
--This is number 4
--This is number 5

The preceding example shows that myNumbers = {} is an empty table constructor. A for loop is created and calls myNumbers[i] five times starting from the number 1. Each time it is called, it is incremented by 1 and then printed out.

主站蜘蛛池模板: 土默特左旗| 柳林县| 黔江区| 河曲县| 车致| 平山县| 固原市| 察雅县| 文昌市| 苏州市| 黄龙县| 万年县| 乐陵市| 巴林右旗| 福泉市| 巴彦淖尔市| 鲜城| 杨浦区| 什邡市| 兴隆县| 平江县| 贵阳市| 隆德县| 沙雅县| 清镇市| 富顺县| 内乡县| 株洲县| 武穴市| 吉安市| 德化县| 焦作市| 泰安市| 突泉县| 赤水市| 五河县| 庆云县| 平阴县| 青海省| 祥云县| 沈丘县|