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