Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List netlogo列表:迭代两个列表_List_Netlogo - Fatal编程技术网

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]的
海龟。