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_Filter_Netlogo - Fatal编程技术网

List NetLogo:如何使用相应列表上引用的标准筛选列表?

List NetLogo:如何使用相应列表上引用的标准筛选列表?,list,filter,netlogo,List,Filter,Netlogo,我的处境: 我在NetLogo中有两个列表,它们被认为是相互对应的,例如作为矩阵的两行 比如说 set list-1 [1 2 2] set list-2 [13 7 8] 其中1被认为与13配对,2与7配对,2与8配对。这些配对可能不会被打破 我的问题: 我想通过对列表1的相应元素应用一个条件来过滤列表2。例如,如果对应项等于2,则保留列表2中的一项 结果应该是: 列表2:[7 8] 其中,由于相应的1不等于2,因此删除了13 如何在NetLogo中编程 我的NetLogo版本:5.3.1我

我的处境: 我在NetLogo中有两个列表,它们被认为是相互对应的,例如作为矩阵的两行

比如说

set list-1 [1 2 2]
set list-2 [13 7 8]
其中1被认为与13配对,2与7配对,2与8配对。这些配对可能不会被打破

我的问题:

我想通过对列表1的相应元素应用一个条件来过滤列表2。例如,如果对应项等于2,则保留列表2中的一项

结果应该是:

列表2:
[7 8]

其中,由于相应的1不等于2,因此删除了13

如何在NetLogo中编程


我的NetLogo版本:5.3.1

我可以想出许多不同的方法来实现这一点:

to go
  let list-1 [1 2 2]
  let list-2 [13 7 8]

  ; the most straightforward, imperative way:
  let list-3 []
  (foreach list-1 list-2 [
    if ?1 = 2 [ set list-3 lput ?2 list-3 ]
  ])
  print list-3

  ; an uglier imperative version using indices:
  let list-4 []
  let i 0
  while [ i < length list-1 ] [
    if item i list-1 = 2 [ set list-4 lput item i list-2 list-4 ]
    set i i + 1
  ]
  print list-4

  ; using reduce, sentence and map:
  print reduce sentence (map [
    ifelse-value (?1 = 2) [ ?2 ] [ [] ]
  ] list-1 list-2)

  ; using map, filter, and indices:
  print map [ item ? list-2 ] filter [
    item ? list-1 = 2
  ] n-values length list-1 [ ? ]    

  ; another variant using `filter`:
  print map last filter [ first ? = 2 ] (map list list-1 list-2)

end
然后你可以这样称呼它:

observer> show filtered-by-first-list task [ ? = 2 ] [1 2 2] [13 7 8]
observer: [7 8]
将所有这些转换为NetLogo 6语法留给读者作为练习。:-)

observer> show filtered-by-first-list task [ ? = 2 ] [1 2 2] [13 7 8]
observer: [7 8]