從實現求差集介紹lua table須要注意的一些問題

用lua實現的求兩個table的差集(只支持一維table)數組

一、lua table 判空:函數

table 判空,用的了next()函數。post

next()函數說明:運行程序來遍歷表中的全部域。 第一個參數是要遍歷的表,第二個參數是表中的某個鍵。 next 返回該鍵的下一個鍵及其關聯的值。 若是用 nil 做爲lua

第二個參數調用 next 將返回初始鍵及其關聯值。 當以最後一個鍵去調用,或是以 nil 調用一張空表時, next 返回 nil。 若是不提供第二個參數,將認爲它就是 nilspa

能夠用 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須要這樣操做:

相關文章
相關標籤/搜索