列表到数组 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为值。
我的问题是关于将列表数据块转换为数组,但是,我一直坚持这一点,并尝试以我能想到的所有可能方式对其进行编码。不幸的是,我无法弄清楚。
首先,我有两个包含这些值的文本文件:
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为值。