9

在我的主协程中,我根据用户操作从表中删除或添加条目。在后台,我想遍历表中的条目。如果我错过了一次迭代中的插入,我不介意,只要我能在下一次之前抓住它。

用 迭代它是否安全pairs?还是我应该next改用?

4

2 回答 2

6

您可以在遍历表时安全地删除条目,但不能创建新条目,即新键。不过,您可以修改现有条目的值。(删除条目是该规则的特例。)

于 2011-05-29T12:20:44.227 回答
5

你不能从这里到达那里。至少不是直接......

正如lhf 所说,您可以在遍历表时修改或删除条目,但不能添加它们。结果是……未定义。(阅读:为所有实际目的分支到超空间或等价物。)

如果您坚持能够添加条目,您将不得不克隆您的表并使用一个副本进行迭代,另一个用于跟踪您的插入和删除。如果这本身不符合您的要求,则您必须改为执行以下操作:

  1. 为表格添加制作一个空表格。
  2. 开始迭代你的主表。
  3. 当您找到要修改的条目时,就地修改它们。(这是允许的。)
  4. 当您找到要删除的条目时,就地删除它们。(这是允许的。)
  5. 当您找到要添加的条目时,将它们添加到另一个开始为空的表中。
  6. 完成迭代后,将加法表合并到主表中。
  7. 泡沫。冲洗。重复。

您可以使用其他类似的模式,但规则略有不同。例如,在第 5 步和第 6 步之间,您可能希望在合并之前为添加的表条目插入对表遍历代码的递归调用,等等。您可能还必须跟踪主表和添加表中可能的删除如果这是可能的交互。

于 2011-05-29T13:17:33.363 回答