List NetLogo:如何使用相应列表上引用的标准筛选列表?
我的处境: 我在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我
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]