我需要每个补丁识别其颜色并计算具有相同颜色的补丁数量。我试过:
ask patches [count patches with pcolor = [pcolor] of myself]
但是,这不正确。我该怎么办?
答案 0 :(得分:2)
with
语法错误 - 它需要下一部分在[]中(以便它询问内容是真还是假)。此外,您还没有告诉补丁一旦计算出来该如何处理该数字。看看这个:
patches-own [count-same]
to setup
let pcol-list (list red blue green)
ask patches [set pcolor one-of pcol-list]
ask patches
[set count-same count patches with [pcolor = [pcolor] of myself]]
end
答案 1 :(得分:1)
Jen的回答是正确的。
话虽如此,我想指出table
扩展名中存在一个非常有用的记者原语:table:counts
。
您可以使用它来完全按照您的需要进行操作。它采用一个项目列表,计算每个项目的出现次数,并将结果放在一个方便的表中,这些项目作为键,计数作为值。在您的情况下,“项目列表”是所有修补程序的pcolor
列表。
以下是您将如何使用它:
extensions [ table ]
patches-own [ count-same ]
to setup
ask patches [ set pcolor one-of base-colors ]
let color-counts table:counts [ pcolor ] of patches
ask patches [ set count-same table:get color-counts pcolor ]
end
与原始代码相比的主要优势在于它可以更快 (尽管如果补丁数量很少,您可能不会注意到它。)
原因是您的代码必须为每个补丁重新计算相同颜色的补丁数量,因此运行时间与补丁数量的平方成正比。在计算机科学术语中,它的复杂性是 O ( n ²)。
另一方面,table:count
原语仅通过颜色列表一次,并在每次看到颜色时将+1添加到右侧“桶”中。它具有线性复杂性: O ( n )。