【问题标题】:Lua Nested Table Getting ElementsLua 嵌套表获取元素
【发布时间】:2014-01-23 04:11:03
【问题描述】:

我有一个这样的嵌套表:

  t1 ={}
  t1[1] = {col1=1,col2=1,col3=1,col4=1}
  t1[2] = {col1=1,col2=1,col3=1,col4=1}
  t1[3] = {col1=1,col2=1,col3=1,col4=1}
  t1[4] = {col1=1,col2=1,col3=1,col4=1}

它实际上要大得多,t1 中有 250 个项目,每个嵌套表有 30 个项目,所以我想要做的是循环并获取子表值,如下所示:

 for i = 2, 4 do
  local width = t1[draw.ID].col1 --draw.ID is got elsewhere
 end

但是将.col1 的数字部分更改为i 部分,这样当它循环通过时:

 t1[draw.ID].col2
 t1[draw.ID].col3
 t1[draw.ID].col4

我正在使用 Lua 5.1。

【问题讨论】:

    标签: lua lua-table


    【解决方案1】:
    for i= 2, 4 do
      local width = t1[draw.ID]["col" .. i] --draw.ID is got elsewhere
    end
    

    【讨论】:

      【解决方案2】:

      理想情况下col或将包含类似数组的表或序列。这是一种更具可扩展性的方式来完成您正在尝试做的事情。字符串连接['col' .. i] 以您将作为数组访问它们的方式访问表键是昂贵且不必要的,如果可以避免。如果这是您计划经常做的事情并希望快速工作,这一点尤其很重要。

      -- Elements of t1 contain tables with cols.
      local t1 = {}
      t1[1] = {cols = {1,1,1,1}}
      t1[2] = {cols = {1,1,1,1}}
      t1[3] = {cols = {1,1,1,1}}
      t1[4] = {cols = {1,1,1,1}}
      
      for i=2, 4 do
        local width = t1[draw.ID].cols[i]
      end
      
      -- Elements of t1 are the cols.
      local t1 = {}
      t1[1] = {1,1,1,1}
      t1[2] = {1,1,1,1}
      t1[3] = {1,1,1,1}
      t1[4] = {1,1,1,1}
      
      for i=2, 4 do
        local width = t1[draw.ID][i]
      end
      

      编辑:如果您必须使用['col' .. i] 样式的表键是不可避免的,那么您可以做的最好的事情就是缓存它们以便更快地访问。

      -- Cache all the possible keys that you'll need.
      local colkeys = {}
      for i=1, 30 do colkeys[i] = 'col' .. i end
      
      for i=2, 4 do
        local width = t1[draw.ID][colkeys[i]]
      end
      

      此方法比每次需要为表建立索引时连接字符串快 48 倍。这不是理想的解决方案,但如果你被col1col30 之类的东西困住,它就可以工作。

      【讨论】:

      • 感谢 Ryan,最终更改了整个代码,以便 t1 的元素包含带有 cols 的表格。
      猜你喜欢
      • 1970-01-01
      • 2020-05-05
      • 2014-08-27
      • 2015-10-15
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      • 2015-01-18
      • 2014-08-12
      相关资源
      最近更新 更多