【问题标题】:Removing line from array从数组中删除行
【发布时间】:2015-04-23 15:52:37
【问题描述】:

我有一个关于 Lua(Corona SDK)的问题:

我有一块可以绘图和清除的白板,但我的清除有问题。这是我的绘图功能:

if(phase == 'moved') then
    local xStart, yStart = self.xStartTemp or e.xStart, self.yStartTemp or e.yStart

    --add new line
    local xEnd, yEnd = e.x, e.y
    local line = display.newLine(xStart, yStart, xEnd, yEnd)

    -- self:drawCircleStream(e.x, e.y)

    self.xStartTemp, self.yStartTemp = xEnd, yEnd
    line.strokeWidth = 1
    line:setStrokeColor(0,0,0)
    self.group:insert(line)
    self.line = line
elseif(phase == 'ended') then
    --store line in a table
    self.xStartTemp, self.yStartTemp = nil, nil
    local lineArr = self.lineArr
    table.insert(lineArr, self.line)
end
return true

这是明确的(这是行不通的):

local lineArr = self.lineArr
for i=1,#lineArr do
    print(lineArr[i])
    table.remove(lineArr[i])
    -- lineArr[i]:removeSelf()
end

【问题讨论】:

    标签: arrays lua coronasdk lua-table


    【解决方案1】:

    函数table.remove 接受两个参数:表本身和要从中删除值的索引。

    那里,代码实际上应该是:

    for i = 1, #lineArr do
        print( lineArr[i] )
        table.remove( lineArr, i )
    end
    

    【讨论】:

      【解决方案2】:

      如果您知道要删除哪个值,也可以尝试一种简单的方法:

      for k, v in pairs (tableName) do
          if v==YOUR-VALUE then
              tableName[k] = nil
              return
          end
      end
      

      只需更改“YOUR-VALUE”并添加值(如果您知道的话)。

      【讨论】:

      • 问题中的代码假定表是sequence。您的代码可以使表格不是序列,从而使# 的结果未定义。
      【解决方案3】:

      在您的明确功能中。 table.remove 在您删除时向下移动表格元素以填补空白,当这与在 for 循环中进行迭代结合使用时,它会给您带来意想不到的行为:

       t  =  { 2, 4, 6 }
       for i, _ in ipairs(t) do
          table.remove(t, i)
       end
       for _, v in ipairs(t) do
         print(v)
       end
      

      最终结果是,t 的值仍然是 4。

      如果你想清空一张桌子,只需分配一个新的:

       self.lineArr = {}
      

      要清除数组而不创建新表,请执行以下操作:

        for i=1,#array do array[i] = nil end
      

      【讨论】:

        猜你喜欢
        • 2021-07-20
        • 2011-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 2012-05-04
        相关资源
        最近更新 更多