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

Netlogo 如何在表扩展的表中使用代理作为键?,netlogo,Netlogo,我使用表扩展名作为一种代理所拥有的变量。 此表的内容包含引用到另一个代理集的代理的值(事件)。 作为表键,我使用e-id列表,其中包含events中每个代理的who编号。 以下过程将初始化这些表: to setup-tables ask walkers [ set we-tfound table:make set we-interest table:make foreach e-ids [ [?] -> table:put we-tfound ? 0

我使用表扩展名作为一种代理所拥有的变量。 此表的内容包含引用到另一个代理集的代理的值(
事件
)。 作为表键,我使用
e-id
列表,其中包含
events
中每个代理的
who
编号。 以下过程将初始化这些表:

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代理[…]
来迭代代理。 然而,我不知道如何使用代理或比whos-id更好的方法来迭代
表:key


非常感谢您的帮助

因为代理不能用作表中的键,所以使用
who
数字是完全合理的。这里的危险是,如果一只海龟死亡,你最终会得到一个与现存海龟不符的条目。(这也是不允许代理作为表中的键的原因。)您可以做
是海龟吗?海龟键
查看
是否对应于现有海龟

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

turtle-set map turtle table:keys my-table
因此,要询问作为表中键的所有海龟,您需要:

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

map-turtle-table:keys
who
数字列表转换为海龟列表<代码>海龟集然后将其转换为代理集。

谢谢您的回答。我尝试了您的示例,但仍然存在问题,因为表是walkers等拥有的变量,并且密钥属于另一个代理品种,
事件
。我尝试了
显示海龟集映射事件表:我们感兴趣的键
,但给出了
错误:您不能在观察者上下文中使用我们感兴趣,因为我们感兴趣的是海龟。
这些键用于另一个代理品种这一事实不应该是问题。只需确保在
Walker
的上下文中运行该代码即可。即:<代码>询问行者[显示龟集映射事件表:我们感兴趣的键] < /C> >您应该强烈地考虑使用链接而不是表。不要让walker存储键为事件的表,而是创建walker到事件的链接。一般来说,使用这样的链接几乎总是比使用表更清晰、更易于维护代码。链接是NetLogo的核心功能,其语言使其易于使用;表格不是核心功能,使用起来很麻烦。谢谢你的评论。表格很难操作和维护。我担心我的代码现在已经足够长了,结果很难遵循。我将回顾一下使用链接的想法。