LUA - 数组管理(添加/删除元素)

我有两个数组:

A={4,8,12}
B={1,2,3,5,6,7,9,10,11}

这些代码的本质是,在调用函数时,从数组B中取一个随机值,按顺序将其插入数组A中,并在另一个循环中从数组B中删除该随机值。

local function Change ()
    local q= math.random(1, #B)

    for i = 1, #A do
        if B[q]<A[i] then
            for t=#A, i, -1 do
                A[t+1]=A[t]
            end
            A[i]=B[q]
            break
        end
    end

    while q<= #B-1 do
        B[q]=B[q+1]
        q=q+1
    end
    B[q]=nil

    for x = 1, #A do print ("当前:", A[x]) end
    for y = 1, #B do print ("空闲:", B[y]) end
end

现在我想使用同样的代码,解决相反的问题 - 从数组A中取一个随机值,按顺序将其插入数组B中,然后从数组A中删除该值。

所以我想要这样做:

Change (A, B) – 从B中查找随机值并插入A(数组)
Change (B, A) – 从A中查找随机值并插入B(数组)

在Lua中是否有任何方法可以做到这一点? 指针或其他方式...

附言:我不想使用“table.sort/table.insert”等来完成此任务。

附言2:我们在帖子中使用指针找到了解决方案,但是今天我找到了另一种解决方案:

C={{4,8,12},{1,2,3,5,6,7,9,10,11}}

Local function Change (x,y)
    a= math.random(1, #C[y])

    for i = 1, #C[x] do
        if C[y][a]<C[x][i] then
            for t=#C[x], i, -1 do
                C[x][t+1]=C[x][t]
            end
            C[x][i]=C[y][a]
            break
        end
    end

    while a<= #C[y]-1 do
        C[y][a]=C[y][a+1]
        a=a+1
    end
    C[y][a]=nil

    for i = 1, #C[x] do print ("在C"..x, C[x][i]) end
    for i = 1, #C[y] do print ("在C"..y, C[y][i]) end
end

并调用Change(1,2)或Change(2,1)。

你认为哪种方法的性能更好?

还有一个关于LUA语法的问题

当我使用以下代码:

C={ A={4,8,12}, B={1,2,3,5,6,7,9,10,11} }

并尝试在函数中使用#C[1]或#C[2]时,我得到错误“尝试获取字段'?'(空值)的长度”。但写C.A或C.B而不是C[1]、C[2]在代码中更清晰。

我不得不像这样进行初始化:

A={4,8,12}, B={1,2,3,5,6,7,9,10,11}, C={A,B}

但在使用C.A或C.B时出现其他错误“尝试获取字段'C'(空值)的长度”。

点赞
用户11298075
用户11298075

在 Lua 中,只有当放置在变量中时,表格才会共享。

mytable = {1,2,3}
newtable = mytable

newtable[1] = "one"

print(mytable[1]) --> 输出:"one"

所以在你的代码中,我们可以将硬编码的表格改为变量:

local function Change(insertTable, valueTable)
    local q = math.random(1, #valueTable)

    for i = 1, #insertTable do
        if valueTable[q] < insertTable[i] then
            for t = #insertTable, i, -1 do
                insertTable[t+1] = insertTable[t]
            end
            insertTable[i] = valueTable[q]
            break
        end
    end

    while q <= #valueTable-1 do
        valueTable[q] = valueTable[q+1]
        q = q+1
    end
    valueTable[q] = nil

    for x = 1, #insertTable do print("Current: ", insertTable[x]) end
    for y = 1, #valueTable do print("Free: ", valueTable[y]) end
end
2019-10-20 09:24:29