List netlogo列表:迭代两个列表
我有两个列表,它们的长度总是相同的。第一个是二进制的,表示代理是否会在这一轮中移动,第二个包含一组代理,根据第一个列表,这些代理将需要执行某些操作。比如:List netlogo列表:迭代两个列表,list,netlogo,List,Netlogo,我有两个列表,它们的长度总是相同的。第一个是二进制的,表示代理是否会在这一轮中移动,第二个包含一组代理,根据第一个列表,这些代理将需要执行某些操作。比如: list1 = [0 1 1 1 0] list2 = [turtle-1 turtle-2 turtle-55 turtle-6 turtle-8] 我的目标是创建第三个列表,其中只有活跃的海龟。因此,该列表将包括:海龟-2海龟-55和海龟-6。最好的方法是什么 我不确定您如何使用map(map更干净、更高效),但使用foreach,您可
list1 = [0 1 1 1 0]
list2 = [turtle-1 turtle-2 turtle-55 turtle-6 turtle-8]
我的目标是创建第三个列表,其中只有活跃的海龟。因此,该列表将包括:海龟-2海龟-55和海龟-6。最好的方法是什么 我不确定您如何使用map(map更干净、更高效),但使用foreach,您可以按如下方式操作:
to test-lists
let list3 []
foreach list2 [
if (item (position ? list2) list1 = 1)[
set list3 lput ? list3
]
]
print (word "List1 is " list1)
print (word "List2 is " list2)
print (word "List3 is " list3)
end
这是输出:
List1 is [0 1 1 1 0]
List2 is [(turtle 1) (turtle 2) (turtle 55) (turtle 6) (turtle 8)]
List3 is [(turtle 2) (turtle 55) (turtle 6)]
像这样:
map last filter [first ? = 1] (map list list1 list2)
样本运行:
observer> crt 10
observer> set list1 [0 1 1 1 0]
observer> set list2 map turtle [1 2 5 6 8]
observer> show map last filter [first ? = 1] (map list list1 list2)
observer: [(turtle 2) (turtle 5) (turtle 6)]
感谢@Seth Tisue使用地图。我不记得如何使用它。多亏了Seth和Marzy,有些语言自然会将代理属性视为列表,但NetLogo不是其中之一。除非您出于与性能相关的原因执行此操作,否则您可能希望声明say
turtles own[active]
,并使用生成list1
的相同逻辑将此属性设置为适当的true
或false
。活动海龟的海龟集就是带有[active]的海龟。