lua 表操作--相加


function table_max(t)
        local max_value = 0
        for k, v in pairs(t) do
                if max_value < v then
                        max_value = v
                end
        end
        return max_value
end

function table_max_index(t)
        local max_index = 0
        for k, v in pairs(t) do
                if max_index < k then
                        max_index = k
                end
        end
        return max_index
end

mytable = setmetatable({1, 2, 3},
{__add = function(mytable, newtable)
                for i = 1, table_max_index(newtable) do
                        table.insert(mytable, table_max_index(mytable) + 1, newtable[i])
                end
                return mytable
        end
})

second_table = {4, 5, 6}

mytable = mytable + second_table
for k, v in ipairs(mytable) do
        print(k, v)
end
1    1
2    2
3    3
4    4
5    5
6    6

 

理解setmetatable

> mytable = {}
> mymetatable = {}
> setmetatable(mytable, mymetatable)
> print(mytable)
table: 0xc60b80
> print(mymetatable)
table: 0xc60e20
> print(setmetatable(mytable, mymetatable))--輸出的是mytable的地址
table: 0xc60b80
> print(getmetatable(mytable))
table: 0xc60e20

 

更改上面的代碼

function table_max(t)
        local max_value = 0
        for k, v in pairs(t) do
                if max_value < v then
                        max_value = v
                end
        end
        return max_value
end

function table_max_index(t)
        local max_index = 0
        for k, v in pairs(t) do
                if max_index < k then
                        max_index = k
                end
        end
        return max_index
end

mytable = setmetatable({0, 1, 2, 3},
{__add = function(mytable, newtable)
                print(table_max_index(newtable))--通過下面的輸出,可以知道,輸出是3
                for i = 1, table_max_index(newtable) do
                        table.insert(mytable, table_max_index(mytable) + 1, newtable[i])
                end
                return mytable
        end
})

second_table = {4, 5, 6}

mytable = mytable + second_table
for k, v in ipairs(mytable) do
        print(k, v)
end

--print(table_max_index(newtable_test))--錯誤

輸出

3
1    0
2    1
3    2
4    3
5    4
6    5
7    6

---------------------------------------------

function table_max(t)
        local max_value = 0
        for k, v in pairs(t) do
                if max_value < v then
                        max_value = v
                end
        end
        return max_value
end

function table_max_index(t)
        local max_index = 0
        for k, v in pairs(t) do
                if max_index < k then
                        max_index = k
                end
        end
        return max_index
end

mytable = {0, 1, 2, 3}

mytable = setmetatable(mytable,
{__add = function(mytable, newtable)
                print(table_max_index(newtable))
                for i = 1, table_max_index(newtable) do
                        table.insert(mytable, table_max_index(mytable) + 1, newtable[i])
                end
                return mytable
        end
})

--mytable = {0, 1, 2, 3}
second_table = {4, 5, 6}

mytable = mytable + second_table
for k, v in ipairs(mytable) do
        print(k, v)
end

--print(table_max_index(newtable_test))

輸出的結果和上面是一樣的。

這里的相加是兩個table合並,即把第二個table里的值依次添加到第一個table中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM