lua deepcopy select index / values to new table and then print new table

新手学习lua,需要一些帮助来了解从lua用户wiki中的深层复制过程。基本上,我有一个在ipairs表中具有多个索引块的属性,我想复制整个索引块,其中属性符合某些if条件,运行在for循环中。最后,我想要打印新表内容。

这个表非常长,所以我只会包含一个简短的摘录。

local tblStudents = {
    {
        ['Name'] = 'Jeff',
        ['Year'] = 'Twelve-A',
        ['Class'] = 'Ms Edwards',
        ['Attended'] = true
    },
    {
        ['Name'] = 'Tom',
        ['Year'] = 'Twelve-B',
        ['Class'] = 'Ms Edwards',
        ['Attended'] = true
    },
    {
        ['Name'] = 'Billy',
        ['Year'] = 'Twelve-A',
        ['Class'] = 'Ms Edwards',
        ['Attended'] = false
    },
    {
        ['Name'] = 'Jack',
        ['Year'] = 'Twelve-B',
        ['Class'] = 'Ms Edwards',
        ['Attended'] = false
    },
    {
        ['Name'] = 'Sam',
        ['Year'] = 'Twelve-A',
        ['Class'] = 'Mr Green',
        ['Attended'] = true
    },
    {
        ['Name'] = 'Diego',
        ['Year'] = 'Twelve-A',
        ['Class'] = 'Mr Green',
        ['Attended'] = false
    },
    {
        ['Name'] = 'Peta',
        ['Year'] = 'Twelve-A',
        ['Class'] = 'Mr Green',
        ['Attended'] = false
    },
    {
        ['Name'] = 'Will',
        ['Year'] = 'Twelve-A',
        ['Class'] = 'Ms Edwards',
        ['Attended'] = true
    },
    {
        ['Name'] = 'Sara',
        ['Year'] = 'Twelve-B',
        ['Class'] = 'Ms Edwards',
        ['Attended'] = true
    },
    {
        ['Name'] = 'Lisa',
        ['Year'] = 'Twelve-A',
        ['Class'] = 'Ms Edwards',
        ['Attended'] = true
    }
}

我想要做的是将没有出席的十二年级所有学生的深层复制复制到一个新的表tblTruant中,我想象语句会使用条件:

for i,v 在ipairs(tblStudents) do
    if v.Year == 'Twelve-A' and v.Attended == false then
        --深层复制到新表。

我收到的深层复制演示代码是这个:

local function deepCopy(original)
    local copy = {}
    for k,v in pairs(original) do
        if type(v) == "table" then
            v = deepCopy(v)
        end
        copy[k] = v
    end
    return copy
end

我不知道如何使用上面概述的条件来应用它。

对于打印新表的结果,我被告知无法将表打印为字符串,要使用这个递归函数:

function dump(o)
   if type(o) == 'table' then
      local s = '{ '
      for k,v in pairs(o) do
         if type(k) ~= 'number' then k = '"'..k..'"' end
         s = s .. '['..k..'] = ' .. dump(v) .. ','
      end
      return s .. '} '
   else
      return tostring(o)
   end
end

我假设这会让我使用print(dump(tblTruant)获取所需结果。

任何帮助都非常感激!

点赞
用户1236045
用户1236045

你不需要比你已经做的更多。只需创建新表格并将有趣的项目插入其中:

tblTruant = {} -- 创建一个新的空表格
for i,v in ipairs (tblStudents) do
    if v.Year == 'Twelve-A' and v.Attended == false then
        table.insert(tblTruant, deepCopy(v)) -- 将深拷贝复制到新表格

print(dump(tblTruant)) -- 打印新表格内容

任何可能对dumpdeepCopy的改进都是另一回事。

2020-12-08 17:19:50