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

问题描述

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

让我们将其称为源 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])