微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将数据和表插入到现有的表中?

如何解决如何将数据和表插入到现有的表中?

在将新的行和表插入到已经存在的行和表中时遇到麻烦。

让我们将其称为源 SourceFile.lua 及其简化的内容

SourceFile = {};

SourceFile.list = {
    BrandName1 = {
        number = 10,products = {
            "Product1",3,"Product2",4,"Product3",7,},BrandName2 = {
        number = 5,10,6,-- and so on
}

我想做这样的事情:

require 'SourceFile'

local myData = {
  BrandName2 = { -- add new products for the existing brand
    products = {
      "Product4",2,MyBrandName1 = { -- add new brand
    number = 12,products = {
      "MyProduct1",21,"MyProduct2",95,-- and so on
}

table.insert(SourceFile.list,myData)

但是我的代码中有什么问题,我得到以下结果(以inspect打印):

{
  list = { {
      BrandName2 = {
        products = { "Product4",2 }
      },MyBrandName1 = {
        number = 12,products = { "MyProduct1",95 }
      }
    },BrandName1 = {
      number = 10,products = { "Product1",7 }
    },BrandName2 = {
      number = 5,6 }
    }
  }
}

我在做什么错了?

我是lua的新手,很确定这很明显,但对我而言不是。请帮帮我。


添加

在回答了这些问题之后,我还找到了一种方法来逐个插入新的品牌名称

SourceFile.list.MyBrandName1 = {
    number = 12,}

这不能完全回答我的问题,但是对lua新手来说可能有用。

解决方法

table.insert将其第二个参数添加到数组(其第一个参数)。您的SourceFile.list仅应具有字符串键,因此不能作为数组使用。您将需要一个递归函数来将数据从一个表合并到另一个表:

local function meld(data,newData)
  for k,v in pairs(newData) do
    local oldValue = data[k]
    if type(oldValue) ~= 'table' or type(v) ~= 'table' then
      -- One of the values is not a table,so let's clobber the old value.
      data[k] = v
    else
      -- Both are tables.
      meld(oldValue,v)
    end
  end
end

meld(SourceFile.list,myData)
,

您正在将品牌名称表推入品牌名称列表。 这使它成为品牌名称列表+带有品牌名称的表格。

myData

这会将SourceFile.list插入到myData中。 SourceFile.list是带有品牌名称的表。 myData也是带有品牌名称的表。 在列表中列出。

您有2种选择来解决此问题:

  1. 分别插入每个品牌名称
  2. 使函数将SourceFile.list的内容合并到const nodeMajor = Number(process.versions.node.split('.')[0])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。