Update 20221104.7 ️ How to iterate over tables in Lua.md

This commit is contained in:
六开箱 2022-11-04 20:43:47 +08:00 committed by GitHub
parent 9c1b210970
commit b0ee84c902
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -19,30 +19,28 @@ In the [Lua][1] programming language, an array is called a table. A table is use
To create a table in Lua, you instantiate the table with an arbitrary name:
```
mytable ={}
mytable = {}
```
There are different ways you can structure your data in a table. You could fill it with values, essentially creating a list (called a list in some languages):
```
mytable ={'zombie','apocalypse'}
mytable = {'zombie','apocalypse'}
```
Or you could create an associated array (called a map or dictionary in some languages). You can add arbitrary keys to the table using dot notation. You can also add a value to that key the same way you add a value to a variable:
```
myarray ={}
myarray.baz='happy'
myarray.qux='halloween'
myarray = {}
myarray.baz = 'happy'
myarray.qux = 'halloween'
```
You can add verification with the `assert()` function:
```
[assert][2](myarray.baz=='happy','unexpected value in myarray.baz')
[assert][2](myarray.qux=='halloween','unexpected value in myarray.qux')
[assert][2](myarray.baz == 'happy', 'unexpected value in myarray.baz')
[assert][2](myarray.qux == 'halloween', 'unexpected value in myarray.qux')
```
You now have two tables: a list-style `mytable` and an associative array-style `myarray`.
@ -53,10 +51,8 @@ Lua's `pairs()` function extracts key and value pairs from a table.
```
print('pairs of myarray:')
for k,v in pairs(myarray)do
  print(k,v)
for k, v in pairs(myarray) do
  print(k, v)
end
```
@ -64,9 +60,7 @@ Here's the output:
```
pairs of myarray:
baz     happy
qux     halloween
```
@ -74,10 +68,8 @@ If there are no keys in a table, Lua uses an index. For instance, the `mytable`
```
print('pairs of mytable:')
for k,v in pairs(mytable)do
  print(k,v)
for k, v in pairs(mytable) do
  print(k, v)
end
```
@ -94,10 +86,8 @@ To account for the fact that tables without keys are common, Lua also provides t
```
print('ipairs of mytable:')
for i,v in ipairs(mytable)do
  print(i,v)
for i, v in ipairs(mytable) do
  print(i, v)
end
```
@ -111,13 +101,10 @@ The output is, in this case, the same as the output of `pairs`:
However, watch what happens when you add a key and value pair to `mytable`:
```
mytable.surprise='this value has a key'
mytable.surprise = 'this value has a key'
print('ipairs of mytable:')
for i,v in ipairs(mytable)do
  print(i,v)
for i, v in ipairs(mytable) do
  print(i, v)
end
```
@ -132,10 +119,8 @@ The key and value pair, however, have been stored in the table:
```
print('pairs of mytable:')
for k,v in ipairs(mytable)do
  print(k,v)
for k, v in ipairs(mytable) do
  print(k, v)
end
```
@ -144,7 +129,6 @@ The output:
```
1          zombie
2          apocalypse
surprise   this value has a key
```
@ -154,21 +138,13 @@ You don't have to iterate over a table to get data out of it. You can call arbit
```
print('call by index:')
print(mytable[2])
print(mytable[1])
print(myarray[2])
print(myarray[1])
print('call by key:')
print(myarray['qux'])
print(myarray['baz'])
print(mytable['surprise'])
```
@ -176,21 +152,14 @@ The output:
```
call by index:
apocalypse
zombie
nil
nil
call by key:
halloween
happy
this value has a key
```