按一个项目对列表进行排序,并识别Netlogo中符合条件的记录



我有一个子列表,类似于下面的

[[0"煤"500 1430][0"气"300 1300][1"煤"600 1500][1"气"700 1400]]

我想做四件事:
1。按子列表的第3项对主列表进行排序
2。将子列表的项目2累加,直到达到某个值
3.识别最后添加的列表中的项目3
4.然后我想确定在第2点添加到循环中的列表中的项目0和1,并请这些海龟做点什么。

我一直在探索表、列表等,但在处理这段复杂的代码时遇到了困难。人们能建议如何对此进行编码吗?

提前感谢您的帮助!

以下似乎回答了这个问题,我认为。。。尽管可能有更优雅的方式

to go
create-turtles 2
let l [[0 "coal" 500 1430] [0 "gas" 300 1300] [1 "coal" 600 1500] [1 "gas" 700 1400]]
;sort the list by item 2 
let sorted sort-by bigger l
show sorted
;accumulate item 3 until limit reached
let k 0
let n 0
let limit 2800
let turtleNos []
let fuels []
while [k < limit]
[
set k k + item 3 ( item n sorted )
;accumulate item 0 and 1
set turtleNos lput item 0 ( item n sorted ) turtleNos 
set fuels lput item 1 ( item n sorted ) fuels 
set n n + 1
]
show k
;show item 3 for the last item added to k
show item 3 (item ( n - 1 ) sorted)
;accumulated lists - note non-unique
show turtleNos
show fuels
(foreach turtleNos fuels 
[ [x y] -> ask turtle x [show y] ])
end
to-report bigger [l1 l2]
report item 2 l1 > item 2 l2
end

最新更新