NetLogo - 将单个值添加到列表列表
NetLogo - Add a single value to a list of lists
我正在尝试在必要时将值输入到列表列表中。
我全局定义一个列表:
set mylist [[[][]][[][]]]
在模拟的各个阶段,我希望代理向列表中插入一个值(这些值将构成它们自己的列表)。例如,如果我想将值 2 添加到项目 1 的项目 0,我会输入:
....
set item 0 item 1 mylist lput 2 item 0 item 1 mylist
....
return错误消息"This isn't something you can use "设置为“打开。”有什么帮助吗?我似乎对添加到列表有一个根本性的误解。
仅供参考,对于上面的示例,我的 return 将 mylist 变为:
[[[][]][[2][]]]
(如果需要,不同的代理将有机会在稍后的模拟中将另一个值添加到项目 1 的项目 0)。
谢谢
NetLogo 列表是不可变的,这意味着您实际上永远无法更改现有列表,只能创建一个新列表。如果你想修改 mylist,你需要 set mylist ...
其中 ...
是你刚刚构建的新列表。
根据旧列表创建一个新列表,除了在一个地方交换不同的值,嗯,这就是 replace-item
所做的。
但是 replace-item
不知道嵌套,所以我们必须自己处理,通过调用 replace-item
两次,一次用于内部列表,一次用于外部列表。
我假设你的列表有一个固定的嵌套深度 2,你不需要处理任意的嵌套深度。
我们需要的第一个积木,我们可以从逐字复制:
to-report replace-subitem [index1 index2 lists value]
let old-sublist item index1 lists
report replace-item index1 lists (replace-item index2 old-sublist value)
end
现在为了解决您的问题,我们只需要做一些额外的工作:
to-report lput-subitem [index1 index2 lists value]
report replace-subitem index1 index2 lists
lput value (item index2 item index1 lists)
end
让我们试一试:
observer> set mylist [[[][]][[][]]]
observer> print mylist
[[[] []] [[] []]]
observer> set mylist lput-subitem 1 0 mylist 2
observer> set mylist lput-subitem 1 0 mylist 3
observer> print mylist
[[[] []] [[2 3] []]]
有效!
我正在尝试在必要时将值输入到列表列表中。
我全局定义一个列表:
set mylist [[[][]][[][]]]
在模拟的各个阶段,我希望代理向列表中插入一个值(这些值将构成它们自己的列表)。例如,如果我想将值 2 添加到项目 1 的项目 0,我会输入:
....
set item 0 item 1 mylist lput 2 item 0 item 1 mylist
....
return错误消息"This isn't something you can use "设置为“打开。”有什么帮助吗?我似乎对添加到列表有一个根本性的误解。
仅供参考,对于上面的示例,我的 return 将 mylist 变为:
[[[][]][[2][]]]
(如果需要,不同的代理将有机会在稍后的模拟中将另一个值添加到项目 1 的项目 0)。
谢谢
NetLogo 列表是不可变的,这意味着您实际上永远无法更改现有列表,只能创建一个新列表。如果你想修改 mylist,你需要 set mylist ...
其中 ...
是你刚刚构建的新列表。
根据旧列表创建一个新列表,除了在一个地方交换不同的值,嗯,这就是 replace-item
所做的。
但是 replace-item
不知道嵌套,所以我们必须自己处理,通过调用 replace-item
两次,一次用于内部列表,一次用于外部列表。
我假设你的列表有一个固定的嵌套深度 2,你不需要处理任意的嵌套深度。
我们需要的第一个积木,我们可以从逐字复制:
to-report replace-subitem [index1 index2 lists value]
let old-sublist item index1 lists
report replace-item index1 lists (replace-item index2 old-sublist value)
end
现在为了解决您的问题,我们只需要做一些额外的工作:
to-report lput-subitem [index1 index2 lists value]
report replace-subitem index1 index2 lists
lput value (item index2 item index1 lists)
end
让我们试一试:
observer> set mylist [[[][]][[][]]]
observer> print mylist
[[[] []] [[] []]]
observer> set mylist lput-subitem 1 0 mylist 2
observer> set mylist lput-subitem 1 0 mylist 3
observer> print mylist
[[[] []] [[2 3] []]]
有效!