Сортировать список по одному элементу и определить запись, которая соответствует условию в Netlogo - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть список подсписков, что-то вроде следующего:

[[0 «уголь» 500 1430] [0 «газ» 300 1300] [1 «уголь» 600 1500] [1 «газ» 700 1400]]

Я хотел бы сделать четыре вещи:
1. Сортировать основной список по пункту 3 подсписков
2. Суммировать сумму пунктов 2 подсписков до достижения определенного значения.
3. Определите пункт 3 из последнего добавленного списка.
4. Затем я хотел бы определить пункты 0 и 1 списков, которые были добавлены к l oop в точке 2, и попросить этих черепах сделать что-то.

Я изучал таблицы, списки и т. Д. c, но боролся с этим сложным фрагментом кода. Могут ли люди предложить, как они будут кодировать это?

Заранее спасибо за помощь!

1 Ответ

2 голосов
/ 19 февраля 2020

Следующее, кажется, отвечает на случай, я думаю ... хотя могут быть более элегантные способы

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
...