lua 引用導致問題解決方案

2021-08-19 11:54:50 字數 1641 閱讀 4963

lua中table型別是一種資料結構用來幫助我們建立不同的資料型別,使用table在程式設計中是再常見不過的了,但是相應的也會碰到引用問題。

通過對以往的問題進行整理並結合別人的案例來提高自身的**水平。

lua中table型別是引用傳遞,因此不能簡單的通過「=」來複製來獲得新錶,否則改動其中一張表都會導致另一張表也被聯動修改。解決辦法是通過clone函式複製table:

function

clone

(object)

local lookup_table = {}

local

function

_copy

(object)

iftype(object) ~= "table"

then

return object

elseif lookup_table[object] then

return lookup_table[object]

endlocal new_table = {}

lookup_table[object] = new_table

for key, value in

pairs(object) do

new_table[_copy(key)] = _copy(value)

endreturn

setmetatable(new_table, getmetatable(object))

endreturn _copy(object)

end

當遇到table中key不是從1開始連續的,使用ipairs方式遍歷會因找不到主鍵導致報錯,解決辦法換用pairs遍歷,該方式不是通過table中的排列順序遍歷,而是通過hash值排列順序來遍歷。

迴圈表刪除操作獲得的結果不正確,這個問題很隱蔽通常不容易發現。導致這個問題的原因是刪除表會導致表的結構被破壞,解決辦法有: 

方法一、逆序刪除

for i=#test,1,-1 do 

if remove[test[i]] then

table.remove(test,i)

endend

local i=1

while i<=#test do

if remove[test[i]] then

table.remove(test,i)

else

i=i+1

endend

function

table.removeitem(list,item,removeall)

local rmcount=0

fori=1,#list do

if list[i-rmcount]==item

then

table.remove(list,i - rmcount)

if removeall then

rmcount=rmcount+1

else

break

endend

endendfor k,v in pairs(remove) do

table.removeitem(test,k)

end

Jar Hell 問題解決方案

最近看到溫紹錦的jvm基礎,裡面看到這個jar hell問題的解決方法,之前遇到過一次,是乙個資源檔案,當時覺得挺麻煩,不知道還有這個方法,很棒,特地整理了下,記錄到這裡來,這個部落格開了好長時間了,一直以來也懶得寫東西,以後會堅持更新些。classloader classloader thread...

top K問題解決方案

1.使用最大最小堆。求最大的數用最小堆,求最小的數用最大堆。2.quick select演算法。使用類似快排的思路,根據pivot劃分陣列。3.使用排序方法,排序後再尋找top k元素。4.使用選擇排序的思想,對前k個元素部分排序。5.將1000 個數分成m組,每組尋找top k個數,得到m k個數...

Win7常見優化導致問題解決方案

一 計算機 右鍵 管理 失效 問題描述 點選計算機 右鍵 管理,沒有反應。這種失效可能並不是優化軟體所帶來的困擾。問題的原因是由於安裝了某些可以新增右鍵選單項的程式所導致的衝突。除了可能影響到計算機 管理,還可能影響到右鍵 以管理員身份執行,跳轉列表等功能選項。解決辦法 下面紅字部分複製到 txt檔...