首页 > 解决方案 > 按一项排序列表并在Netlogo中识别满足条件的记录

问题描述

我有一个子列表列表,如下所示

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

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

我一直在探索表格、列表等,但在这段复杂的代码中苦苦挣扎。人们可以建议他们如何编码吗?

在此先感谢您的帮助!

标签: netlogo

解决方案


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

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

推荐阅读