Netlogo中是否有数组[index1,index2]数据结构?

时间:2017-11-29 08:18:40

标签: netlogo

是否有Netlogo的扩展允许创建使用“array [i,j]”样式表示法访问的多维数组?我发现使用item会导致代码长而难以读取,而我只是迷失在2D列表上的任何东西(虽然我意识到其他人对它非常熟悉)。

谢谢!

2 个答案:

答案 0 :(得分:4)

不是我所知道的,但是自己做一个原始人很容易。这里提供了几种不同的实现方式:

使用递归:

to-report nested-get [ lst indices ]
  ifelse empty? indices [
    report lst
  ] [
    report nested-get (item first indices) (but-first indices)
  ]
end

使用reduce

to-report nested-get [ lst indices ]
  report reduce [ [ l i ] -> item i l ] fput lst indices
end

我选择将列表中的索引放在参数中以更好地匹配您希望的语法,但您可以考虑将它们放在之前,以与item对应。记者的调用如下:

observer> show nested-get [ [ "a" "b" "c" ] [ "d" "e" "f" ] ]  [1 2]
observer: "f"

不幸的是,如果您想使用变量或记者作为索引,则需要使用list代替[]

observer> let i 0 let j 1 show nested-get [ [ "a" "b" "c" ] [ "d" "e" "f" ] ]  (list i j)
observer: "b"

语法支持任意数量的嵌套。您还可以创建特定于维度的版本,以使语法更简单:

to-report item2 [ i j lst ]
  report item j item i lst
end

答案 1 :(得分:1)

现在,netlogo的扩展名为:array

以下是代码示例:

extensions [array ]

to  setup 
set ex array:from-list n-values 10 [0]
set i 1

while [i < 10  ][
   array:set ex i i + 1
]
end