拔下钥匙时,如何安全地迭代lua表

问题描述

| 在我的主要协程中,我将根据用户操作从表中删除添加条目。在后台,我想遍历表中的条目。我不介意特别是如果我在一次迭代中错过了一次插入,条件是我可以在下一次迭代之前抓住它。 用ѭ0遍历是否安全?还是应该改
next
?     

解决方法

        您可以在遍历表时安全地删除条目,但不能创建新条目,即新键。不过,您可以修改现有条目的值。 (删除条目是该规则的特例。)     ,        您不能从这里到达那里。至少不是直接...。 正如lhf所说,您可以在遍历表时修改或删除条目,但不能添加它们。结果是...未定义。 (阅读:出于所有实际目的,请进入超空间或等效空间。) 如果您坚持要能够添加条目,则必须克隆表,并使用一个副本进行迭代,而使用另一个副本来跟踪您的插入和删除操作。如果这本身不符合您的要求,则必须改为执行以下操作: 为表添加一个空表。 开始遍历您的主表。 当您找到要修改的条目时,就地对其进行修改。 (允许) 找到要删除的条目后,就地删除它们。 (允许) 找到要添加的条目时,请将其添加到以空开头的另一个表中。 完成迭代后,将加法表合并到主表中。 泡沫。冲洗。重复。 您还可以使用其他类似的模式,但使用的规则略有不同。例如,在第5步和第6步之间,您可能希望在合并之前为添加的表条目插入对表步行代码的递归调用,等等。您可能还必须跟踪主表和添加表中可能的删除操作如果可能的话。