netlogo列表:迭代两个列表

时间:2015-08-27 04:05:17

标签: list netlogo

我有两个列表,两个列表的长度始终相同。第一个是二进制,表示代理是否会移动此轮,第二个包含一组需要根据第一个列表执行某些操作的代理。类似的东西:

list1 = [0 1 1 1 0]
list2 = [turtle-1 turtle-2 turtle-55 turtle-6 turtle-8]

我的目标是创建第三个列表,其中只有活跃的海龟。因此,该清单将包括:龟2龟-55和龟-6。最好的方法是什么?

2 个答案:

答案 0 :(得分:3)

像这样:

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)]

答案 1 :(得分:1)

我不确定你如何使用地图(地图更清洁,更有效),但是使用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)]