Netlogo:从其他两个列表的关系中获取第三个列表

时间:2018-03-30 21:57:33

标签: netlogo

我想从前两个列表的关系中提取第三个列表。这是一个例子:

我在NetLogo中有一个输出0和1列表的进程,让我们称之为List_A:

let List_A [0 1 0 1 1 ]

0和1的位置总是根据与此问题无关的几个因素而变化。

还有一个与List_A相关的名为List_B的列表:

let List_B [“residential” “industrial” “commercial” “farmland” “preservation”]

此列表项的位置永远不会变化。

我想要获得的第三个列表是List_B的项目,其位置对应于List_A项目中具有值1的位置。因此,根据前面的示例,这将是由[“industrial”制成的列表“”farmland“”preservation“],因为”住宅“和”商业“的位置对应于值0,因此从列表中删除。

使用此代码取得一些进展,该代码输出具有值1的项目List_A的位置列表:

to-report comp-positions
report filter [ i -> item i List_A = 1 ] 
n-values (length List_A) [ i -> i ] 
end

但不知道如何将其应用于List_B以获取第三个列表。

2 个答案:

答案 0 :(得分:3)

为了完整性,还有三种方法:

print map last filter [ p -> first p = 1 ] (map list List_A List_B)

print reduce sentence (map [ [a b] -> item a (list [] b) ] List_A List_B)

print reduce [ [acc val] ->
  ifelse-value (first val = 1) [ lput last val acc ] [ acc ]
] fput [] (map list List_A List_B)

答案 1 :(得分:1)

可能只采用一步法,但可以使用mapfilter的组合?使用map的{​​{1}}可以生成零的列表和" List_B"项目,然后筛选以删除零:

ifelse-value