如何使用代理作为表扩展表中的键?

时间:2017-07-08 22:45:10

标签: netlogo

我使用表扩展作为一系列代理所拥有的变量。 此表的内容包含引用另一个代理集(events)的代理的值。 作为表格密钥,我使用e-ids一个列表,其中包含who品种中每个代理的events个数字。 以下过程初始化表:

to setup-tables
  ask walkers [
      set we-tfound table:make
      set we-interest table:make
      foreach e-ids [ [?] -> table:put we-tfound ? 0
                             table:put we-interest ? 1  ] ]
  ask links [
    set popularity table:make
    foreach e-ids [ [?] -> table:put popularity ? 0 ] ]
end

其他人的回答建议不要使用who个数字,并使用例如构造ask agents [...]来迭代代理。 但是,我不知道怎么可能是使用代理迭代table:keys的最好方法,或者比使用id更好的方法。

非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

由于代理不能用作表中的键,因此使用who数字是完全合理的。这里的危险是,如果一只乌龟死了,你最终会得到一个与现有乌龟实际上并不相符的条目。 (这也是代理不允许作为表中的键的原因。)您可以is-turtle? turtle key查看key是否与现有的乌龟相对应。

要将table:keys转换回代理集,您可以执行以下操作:

turtle-set map turtle table:keys my-table

因此,对于ask表中键的所有海龟,你可以:

ask turtle-set map turtle table:keys my-table [ do-stuff ]

map turtle table:keyswho个数字列表转换为海龟列表。 turtle-set然后将其转换为代理集。