列表到数组 Netlogo

List to array Netlogo

我的问题是关于将列表数据块转换为数组,但是,我一直坚持这一点,并尝试以我能想到的所有可能方式对其进行编码。不幸的是,我无法弄清楚。

首先,我有两个包含这些值的文本文件:

0 1 2 3 438 418 424 434 439 417 421 0 ... 447 412 426 436 448 413 422 0

然后我想将它添加到 Netlogo,所以我使用这个:

extensions [table matrix array csv]
globals
[
  Dummy-Retrieve-list
  patch-data
  string-array
]
to setup
file-close-all
ca
file-open "Matching.txt"
while [ not file-at-end? ]
  [
    set string-array (list n-values 4 [file-read])
    print string-array
    let i 0
    foreach string-array
    [ x -> array:set patch-data i x
      set i (i + 1)
      print patch-data
    ]
  print patch-data
  ]
file-close

我在这里想要的是在输入列表中取一批4个值(将来可能是n值),然后将其组成一个数组作为另一个数组的输入。但是,我不知道怎么做,所以我使用 foreach 函数循环遍历这些值,然后使用 array:set 将数据设置到新数组中。

我不知道值的位置会如何变化,所以我使用 "set i (i + 1)" 来保持顺序。但它 returns false,因为它需要一个匿名命令而不是列表或块,所以我被卡住了。

有谁知道将值列表转换为数组值列表的更简单方法?我问这个的原因是将来可能不会选择4个值,而是可能会选择更多,所以不可能使用这样的代码:

set string-array list file-read file-read file-read file-read

这就是我使用 list n-values 4 [file-read] 的原因。我还搜索了 Google 和 NetLogo 程序提供的所有其他示例,但仍然没有弄明白。

总而言之,我想要的是像这样转换一个列表:

[[v11 v21 v31 ... vn1] [[v12 v22 v32 ... vn2] ... [v1m v2m v3m ... vnm]]

进入这个数组:

{{array: {{array: v11 v21 v31 ... vn1}} {{array: v12 v22 v32 ... vn2}} ... {{array: v1m v2m v3m ... vnm}}}}

我找到了回答我问题的方法,它使用的是双 foreach 循环。

@NicolasPayette,谢谢你帮我解答。

这是我的问题的答案:

file-open "Matching.txt"
let k 0
while [ not file-at-end? ]
[
  let j 0
  set string-array (list n-values 4 [file-read])
  print string-array
  foreach string-array 
  [ [i] -> foreach i
    [ [m] -> insert-retrieval j k m
      set j j + 1
    ]
  ]
  set k k + 1
  print Retrieve-list
]
file-close

insert-retrieval j k m是向Retrieve-list中输入数据的函数,j为列,k为行,m为值。