佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > Lua table類(lèi)型學(xué)習(xí)筆記

Lua table類(lèi)型學(xué)習(xí)筆記

熱門(mén)標(biāo)簽:百度競(jìng)價(jià)排名 鐵路電話系統(tǒng) 服務(wù)外包 Linux服務(wù)器 地方門(mén)戶網(wǎng)站 呼叫中心市場(chǎng)需求 網(wǎng)站排名優(yōu)化 AI電銷(xiāo)

關(guān)系表類(lèi)型,這是一個(gè)很強(qiáng)大的類(lèi)型。我們可以把這個(gè)類(lèi)型看作是一個(gè)數(shù)組。只是 C語(yǔ)言的數(shù)組,只能用正整數(shù)來(lái)作索引; 在Lua中,你可以用任意類(lèi)型的值來(lái)作數(shù)組的索引,但這個(gè)值不能是 nil。同樣,在C語(yǔ)言中,數(shù)組的內(nèi)容只允許一種類(lèi)型;在 Lua中,你也可以用任意類(lèi)型的值來(lái)作數(shù)組的內(nèi)容,nil也可以。

基本介紹

注意三點(diǎn):
    第一,所有元素之間,總是用逗號(hào) "," 隔開(kāi);
    第二,所有索引值都需要用 "["和"]" 括起來(lái);如果是字符串,還可以去掉引號(hào)和中括號(hào); 即如果沒(méi)有[]括起,則認(rèn)為是字符串索引
    第三,如果不寫(xiě)索引,則索引就會(huì)被認(rèn)為是數(shù)字,并按順序自動(dòng)從 1往后編;

例如:

復(fù)制代碼 代碼如下:

tt = {"hello" ,33}
value = 4
tab = {[tt] = "table",key = value, ["flag" ] = nil, 11}

print(tab[tt])
print(tab.key)
print(tab[1 ])


以上寫(xiě)法都是對(duì)的。

look = {[www] = "ok"}這樣是不對(duì)的,www沒(méi)有賦值,所以默認(rèn)為nil因此出錯(cuò)table index is nil

復(fù)制代碼 代碼如下:

---
temp = 1
tab = {[temp] = 1, 11}

print(tab[temp]) --此時(shí)的結(jié)果是11,因?yàn)?1沒(méi)有顯式對(duì)應(yīng)的key,因此從1開(kāi)始,如果前面定義了,則覆蓋其value
復(fù)制代碼 代碼如下:

---
temp = 2
tab = {[temp] = 1, 11}
temp = 1

print(tab[temp]) -- 結(jié)果是11,雖然定義時(shí)[temp] = 1,但是后來(lái)我們改變了temp的值,所以指向另外的key了


以上可知:

1.對(duì)于字符串,在{}定義時(shí),可以key = value, 也可以["flag"] = nil,索引都是string類(lèi)型,對(duì)于非nil類(lèi)型變量(包括字符串),都可以[variable]=value的方式
2.使用table時(shí),對(duì)于字符串,可以通過(guò).的方式訪問(wèn),也可以通過(guò)[]方式訪問(wèn)。tab[a],tab[b],只要a==b那么tab[a]可以訪問(wèn)到tab[b]的值
3.不管定義索引時(shí)用的是常量還是變量,最終table中value的索引key是常量,不會(huì)隨變量的改變而變化該value的key

嵌套

復(fù)制代碼 代碼如下:

tb11= {tb12 = {bool = true}} -- simple, it's a table IN a table :)
-- Call magic!
print(tb11.tb12.bool ) -- works fine, since it's calling the key and value correctly.
print(tab11["tb12" ].bool ) --same as line 33
print(tab11.tb12 ["bool"]) --same as line 33
print(tab11["tb12" ]["bool"]) --same as line 33

修改table的value
復(fù)制代碼 代碼如下:

--Altering a table's content. Basically manipulating the values of the keys.
lucky= {john="chips" ,jane ="lemonade",jolene="egg salad" }

lucky.jolene = "fruit salad" --changed the value to "fruit salad" instead of "egg salad"
lucky.jerry = "fagaso food" -- adding a new key-value pair to the container lucky.
lucky.john = nil -- remove john from giving anything or from being a key.

table的易變性

復(fù)制代碼 代碼如下:

a = {}; b = a;
print(a == b)  --> true

c,d = {},{};

print(c == d) -->false

table庫(kù)函數(shù)使用
-----------------------------------------------------------
1. table.sort (table [, comp])
Sorts table elements in a given order, in-place, from table[1] to table[n], where n is the length of the table. If comp is given, then it must be a function that receives two table elements, and returns true when the first is less than the second (so that not comp(a[i+1],a[i]) will be true after the sort). If comp is not given, then the standard Lua operator is used instead.
The sort algorithm is not stable; that is, elements considered equal by the given order may have their relative positions changed by the sort.

復(fù)制代碼 代碼如下:

name = {"you" ,"me", "him","bill" }
--table.sort - only works with arrays!
table.sort(name)
for k, v in ipairs( name) do
     print( k,v)
end
--table.sort uses callbacks. a function that is writtent to be called by a library function.
function cmp( a, b)
     if string.sub(a,2 ,2) string.sub(b,2 ,2) then
          return true
     else
          return false
     end
end

table.sort(name, cmp)
for k, v in ipairs( name) do
     print( k,v)
end

2. table.insert (table, [pos,] value)

Inserts element value at position pos in table, shifting up other elements to open space, if necessary. The default value for pos is n+1, where n is the length of the table so that a call table.insert(t,x) inserts x at the end of table t.

復(fù)制代碼 代碼如下:

--table.insert --an easy to copy a table to another table or adding elements to an array.!
foo = {"a" ,"c", "d"}
bar = {}
function printt( table)
    for i=1 ,#table do
         print(i,table [i ])
    end
end
print("before insert:" )
printt(foo)
table.insert(foo,2 ,"b")
print("after insert" )
printt(foo)

3.  table.concat (table [, sep [, i [, j]]])

Given an array where all elements are strings or numbers, returns table[i]..sep..table[i+1] ··· sep..table[j]. The default value for sep is the empty string, the default for i is 1, and the default for j is the length of the table. If i is greater than j, returns the empty string.

復(fù)制代碼 代碼如下:

--table.concat does what it implies. Takes an array and concates to one string.
num = {1 ,2, 3,4,5 ,6}
print(table.concat (num ,""))

4. table.remove (table [, pos])

Removes from table the element at position pos, shifting down other elements to close the space, if necessary. Returns the value of the removed element. The default value for pos is n, where n is the length of the table, so that a call table.remove(t) removes the last element of table t.

復(fù)制代碼 代碼如下:

abc = {"a" ,"b", "c"}
print(table.remove (abc ,2))
print("abc length = " .. #abc)

5. table.maxn (table)

Returns the largest positive numerical index of the given table, or zero if the table has no positive numerical indices. (To do its job this function does a linear traversal of the whole table.)
--table.maxn

復(fù)制代碼 代碼如下:

apple = {"a" ,"p",[ 5]="e"}
print(table.maxn (apple )) -- 5

duck = {[-2 ]=3,[- 1]=0}
print(table.maxn (duck )) -- 0

面向?qū)ο缶幊?/strong>

復(fù)制代碼 代碼如下:

--note for a object to work, it needs a closure(inner function with an upvalue(a local value from a higher scope))
--note: the more closures made, the slower the program would run.
function mg1( n)
    local function get ()
         return n ;
    end
    local function inc (m )
        n = n +m ;
    end
    return {get = get, inc= inc}
end

object = mg1(50 )
print(object.get ())
print(object["get" ]())

object.inc(2 )
print(object.get ())

----------------------------------------
do
    local function get (o )
         return o.one
    end
    local function inc (self , two )
        self.one = self.one + two
    end
    function mg3 (one )
         return {one = one , get = get , inc = inc }
    end
end
a = mg3(50 )
a:get()
a.inc(a,2 )
print(a:get())

----------------------------------------
do
    local T = {};
    function T:get()
         return self.n ;
    end
    function T:inc(m)
        self.n = self.n + m ;
    end
    function mg4 ( n )
         return {n = n , get =T.get , inc =T.inc }
    end
end

c = mg4(30 )
print(c:get())
c:inc(4 )
print(c:get())

(完)

您可能感興趣的文章:
  • Lua中對(duì)table排序?qū)嵗?/li>
  • Lua中table的一些輔助函數(shù)介紹
  • Lua table簡(jiǎn)明總結(jié)
  • Lua中的metatable詳解
  • Lua中table庫(kù)函數(shù)方法介紹
  • Lua中的table學(xué)習(xí)筆記

標(biāo)簽:仙桃 崇左 衡水 黃山 湖南 銅川 湘潭 蘭州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Lua table類(lèi)型學(xué)習(xí)筆記》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    井陉县| 靖安县| 夹江县| 双流县| 云龙县| 陆川县| 蒙山县| 顺昌县| 乐亭县| 钟山县| 万安县| 桐城市| 鹿泉市| 沂源县| 乐山市| 册亨县| 民县| 汉中市| 香河县| 铅山县| 内乡县| 会泽县| 思南县| 寿阳县| 赤峰市| 广宗县| 特克斯县| 娱乐| 镇平县| 台山市| 长岛县| 隆林| 改则县| 静安区| 台东县| 会东县| 法库县| 岑溪市| 三穗县| 克拉玛依市| 吉隆县|