计算同一海龟列表中的出现次数

Count number of occurrences in a list from same turtle

我想知道如何在列表中找到项目的 'source'。我需要为此任务考虑的操作如下:

1) 在乌龟创建的列表中添加了一个项目;

2) 由于每只乌龟都有自己的列表,其中包含由不同乌龟创建的项目,我想设置一个计数器来说明这只乌龟选择乌龟 A 的项目的频率。

方法和代码:

这段代码在选定海龟的列表中添加了一个名为 'this_item' 的项目(局部变量):

ask one-of turtles [

              set archive fput this_item archive
]

此其他代码将相同的项目添加到邻居列表中:

 ask in-link-neighbors [
              set archive fput this_item archive
]

我会设置一个局部变量,例如已选择,作为列表中的第一项。

let picked first archive

要查找项目的来源,我想使用 who。但是,who 用于在提取项目后将其添加到自己的列表中的乌龟。

print (word "Source: " who " has this list " list " after added item " picked)

如果我认为一个变量 source 在乌龟创建新项目时通过使用我自己定义为项目的来源,这只会向我报告来源(学生)的品种,而不是相应的来源的乌龟(例如学生 2)。 这使得无法计算一个来源的项目被选择了多少次。

问题:

如何统计同一只乌龟的物品被选中的次数?

在此先感谢您的帮助和建议。

我能想到的最简单的方法是让每个 this-item 成为一个双元素列表,第 0 项是 "item" 本身,第 1 项是源海龟。 this-item 将由具有

的乌龟创建
set this-item list x self

(注意 "item" 本身是一个保留关键字,所以我的 "item" 是 x。)任何将 this-item 放入其列表中的乌龟都会知道 item 0 this-item 是事物本身,而 item 1 this-item 是它来自的乌龟。要计算列表中的条目数,比如 archive,属于给定乌龟的条目数,比如 turtle 1,来自给定乌龟的条目数,比如 turtle 3,你可以使用

ask turtle 1 [show length filter [a -> item 1 a = turtle 3] archive]

如果您需要 turtle 3 在所有海龟档案中创建条目的次数,您可以分步完成。首先创建一个包含所有存档列表的列表。

let all-archives [archives] of turtles

然后使用 map 遍历该列表以列出每个存档中的条目数并对该列表求和。

show sum map [t -> length filter [a -> item 1 a = turtle 3] t ] all-archives

(我现在无法对此进行测试,因此请检查语法。)当然,如果您愿意,turtles 可以是所有海龟的子集。