用lua實現的求兩個table的差集(只支持一維table)數組
一、lua table 判空:函數
table 判空,用的了next()函數。post
next()函數說明:運行程序來遍歷表中的全部域。 第一個參數是要遍歷的表,第二個參數是表中的某個鍵。 next
返回該鍵的下一個鍵及其關聯的值。 若是用 nil 做爲lua
第二個參數調用 next
將返回初始鍵及其關聯值。 當以最後一個鍵去調用,或是以 nil 調用一張空表時, next
返回 nil。 若是不提供第二個參數,將認爲它就是 nil。spa
能夠用 next(t)
來判斷一張表是不是空的。code
二、tabale.remove():blog
table.remove(list[, post]) 移除 list
中 pos
位置上的元素,並返回這個被移除的值。 當 pos
是在 1 到 #list
之間的整數時, 它向前移動元素。不帶pos,默認移除最後一個元素。rem
與tbl[key] = nil相比,賦值nil,table長度不會變短(實際驗證會刪除,可是建議使用remove刪除)string
正由於刪除後,剩餘的元素向前移動,因此不能在循環中這樣使用(下面代碼是錯誤的):hash
由於在table表中使用for迭代時,將符合條件的元素刪除時,後面元素前移,而後產生跳躍,而使用for i=1,#mytable 這樣的循環時,因爲在for時就已經肯定了循環的終點是table的總長度,
在整個for運行過程當中,終點不會改變。因此當你刪除元素時,在循環到i = #mytable 時,會報錯nil。由於此時table長度已經縮短了,因此特別注意不能在循環中刪除table
三、table 的排列順序:
lua table並不是像數組同樣順序存儲的,更加像是C++中的map,經過Key對應存儲Value,可是並不是順序來保存key-value對,而是使用了hash的方式,這樣可以更加快速的訪問key對應的value。
因此遍歷時並不是是table的排列順序,而是根據key的hash之排列的順序遍歷的
四、table 賦值:
lua當變量做爲函數的參數進行傳遞時,相似的也是boolean,string,number類型的變量進行值傳遞。而table,function,userdata類型的變量進行引用傳遞,table的賦值實質也是引用。
例如:local table_a = table_b,在修改table_a時,table_b也修改了。
因此要賦值table須要這樣操做: