NetLogo使用嵌套列表查询指定user breed属性的操作问题咨询
NetLogo用户追踪数据提取操作指南
问题1:按当前主体who编号提取匹配子列表
你可以直接用NetLogo内置的filter原语遍历嵌套列表,匹配子列表中对应用户编号的位置即可。
假设你存储所有数据的嵌套列表名为all-user-data,且每个子列表的第2个元素(列表索引从0开始计数,对应索引值为1)存储用户who编号:
在ask users的上下文里,直接用以下代码提取当前用户的所有匹配条目:
; 先获取当前运行主体的who编号 let current-user-who who ; 过滤所有对应当前用户的子列表 let user-related-entries filter [ entry -> item 1 entry = current-user-who ] all-user-data
运行后user-related-entries就是你需要的单个用户的所有时间点数据集合。
问题2:获取子列表索引及指定属性取值
注:以下索引规则基于你给出的子列表结构推导,如果你实际的元素排列顺序不同,调整
item后的索引数值即可
索引0:tick值、索引1:用户who编号、索引2:attrib 1、...、索引10:attrib 9
获取子列表索引
如果需要遍历用户的条目集合同时拿到每个子列表的索引,用带索引参数的foreach即可(NetLogo 6.0及以上版本支持):
foreach user-related-entries [ [entry idx] -> ; idx为当前子列表在集合中的索引,entry为子列表本身 print (word "第" idx "条条目内容:" entry) ]
提取tick 1对应的attrib 9取值
有两种常用实现方式:
- 如果你确定用户条目集合固定按tick 0在前、tick 1在后排序,直接按索引取值即可:
; 取索引1的子列表即tick 1的条目 let tick1-entry item 1 user-related-entries ; 取索引10的元素即attrib 9的值 let target-attrib9 item 10 tick1-entry
- 如果条目顺序不固定,用filter匹配tick值后取值:
; 过滤出tick=1的子列表,first提取过滤结果的第一个元素 let tick1-entry first filter [ entry -> item 0 entry = 1 ] user-related-entries let target-attrib9 item 10 tick1-entry
内容的提问来源于stack exchange,提问作者JPK
相关产品推荐
相关产品推荐

