Table的索引可以是 nil外的任何類型的變數,當然最常用的還是number和string
先來個例子比較好理解
> t = {
>> name = "jeff", --> 可以理解為使用string當成取值的key
>> phone = {'09123456', '04-2222333'}, -->一樣,但值改為另一個table
>> email = 'abc@gmail.com',
>> 60, --kg --> 不指定index key,因此為流水號,為[1]
>> 170, --cm --> 不指定index key,因此為流水號,為[2]
>> [5] = 'apple' --> 指定為[5]
>> ,
>> ['sport'] = 'football'
>> }
> print(t.name, t.phone, t.email) -->第二個因為是table,所以印出來的是table的address
jeff table: 004346C0 abc@gmail.com
> print(t[1], t[2], t[3], t[4], t[5]) -->因為只有[1], [2], [5]有值,所以其它的為nil
60 170 nil nil apple
> print(t['sport'], t.phone[1])
football 09123456
> print(t.sport) -->這裡就更重要了,可看.sport和['sport']是等效的
football
> print(t['name']) -->反過來也OK
jeff
> print(t.5) --> 但是數字的index不能使用.5的方式的表示
stdin:1: ')' expected near '.5'
這邊可以看出一個現象:Lua的index是由1算起的,比較像basic不像C
--------------
取得元素的個數,這就讓我疑惑了…
> print(table.getn(t))
2
可以了解,getn()只會取得以number為index key的元素數量,且從1開始算起,直到nil為止!!
因為t[3]是nil,所以被判定為只有2個元素
--> 要很小心,不要在 Table中隨便的使用 nil,如果這一個元素真的用不到就直接remove掉
--------------
concat 把所有元素結合在一起,是個很方便的用法,等於是把所有元素都用..連起來
> t2 = {1, 2, 3, "44"}
> print(table.concat(t2))
12344
> print(table.concat(t2, ", "))
1, 2, 3, 44
> print(table.concat(t2, " ", 2, 4))
2 3 44
---------------
insert(table, [index, ] value)
> print(table.concat(t2, " ", 2, 4)
> print(table.concat(t2, ", "))
11, 1, 2, 3, 44
> table.insert(t2, 99)
> print(table.concat(t2, ", "))
11, 1, 2, 3, 44, 99
-----------------
remove(table, index)
> table.remove(t2, 1)
> print(table.concat(t2, ", "))
1, 2, 3, 44, 99
-------------------
maxn(table) 取得最大的index
> print(table.maxn(t2))
5
###!!! 要注意的,之前提到的nil的事,以下的操作並不會讓max index增加!,因此說這用法很方便,但很有陷井
> table[7] = 7
> print(table.concat(t2, ", "))
1, 2, 3, 44, 99
> print(table.maxn(t2))
5
-------------------
sort(table [, compare])
local t = {1, 2, 7, 5, 3}
table.sort( t )
print(table.concat(t, ", "))
--> 1, 2, 3, 5, 7
local function compare(x, y)
return x > y
end
table.sort(t, compare)
print(table.concat(t, ", "))
-->7, 5, 3, 2, 1
sort(table [, compare])
local t = {1, 2, 7, 5, 3}
table.sort( t )
print(table.concat(t, ", "))
--> 1, 2, 3, 5, 7
local function compare(x, y)
return x > y
end
table.sort(t, compare)
print(table.concat(t, ", "))
-->7, 5, 3, 2, 1
沒有留言:
張貼留言