【问题标题】:How can I compress a table after having removed a value from it?从表中删除值后如何压缩表?
【发布时间】:2011-05-20 06:00:26
【问题描述】:

我有一个包含 4 个值的表。

例如:

2
4
1
3

我使用一个函数来逐步查找表格,假设数字 1 通过使用对来获取它在表格中的位置。

然后我使用 table.remove 从该位置删除 1。我现在想做的是压缩表格,使其长度为 3 个值 2 4 3

我对 LUA 还很陌生,所以请对我温柔一点。 :)

我所拥有的几乎是这样的:

CloseRandomConsole = math.random(1,(#ConsoleTable)) 

If CloseRandomConsole == 1 then 
 for key, value in pairs(ConsoleTable) do 
 if value == "1" then 
  table.remove(ConsoleTable, key) 
 break 
 end 
end 

我知道我哪里出错了,但我不知道如何解决它。

math.random(1,(#ConsoleTable))

我只希望能够在表中的一个值之间随机选择。当我随机化了那个 vlue 时,我希望它被移除,这样我就可以得到其他三个随机值。

我让你感到困惑吗? :)

【问题讨论】:

  • 如果问题不再是问题,请选择一个答案。否则它将继续出现在“未回答的问题”中

标签: lua compression lua-table


【解决方案1】:

什么意思?

s = {2,4,1,3} -- the table
for k,v in pairs(s) do 
  if v==1 then 
     table.remove(s,k)
  end
end

print(#s) -- is now 3
for k,v in pairs(s) do print(v) end -- just the 3 values ...

@Vitae:当你询问任何事情时,你应该描述你想做什么,而不是你想怎么做——尤其是当你不知道自己在做什么的时候......

也许您想从表中删除一个随机值?然后在随机索引处获取值...

function poprandom( t )
  local idx = math.random(1,#t)
  local ret = t[idx]
  table.remove(t, idx)
  return ret
end

【讨论】:

  • 我正在使用 math.random 从表中获取随机值。我可能做错了。
  • CloseRandomConsole = math.random(1,(#ConsoleTable)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多