Есть много способов решения этой проблемы, но я дам вам два.
Давайте начнем с того, который ближе всего к тому, что вы сейчас пытаетесь сделать.
turtles-own [ my-list ]
to setup
clear-all
create-turtles 3 [
set my-list [] ; start with empty list
foreach range 5 [ car -> ; let's pretend cars are just numbers
let attribute-1 precision (random-float 1) 2
let attribute-2 precision (random-float 1) 2
set my-list fput (list car attribute-1 attribute-2) my-list
]
]
ask turtles [
show my-list
print " Best car by attribute 1:"
let best-by-1 last sort-by [ [a b] -> item 1 a < item 1 b ] my-list
print word " Sublist: " best-by-1
print word " Car number: " item 0 best-by-1
print " Best car by attribute 2:"
let best-by-2 last sort-by [ [a b] -> item 2 a < item 2 b ] my-list
print word " Sublist: " best-by-2
print word " Car number: " item 0 best-by-2
print "--------"
]
end
Большая часть этого кода предназначена для создания черепах и отображения результата, но две ключевые строки:
set my-list fput (list car attribute-1 attribute-2) my-list
для добавления подсписков в основной список и:
let best-by-1 last sort-by [ [a b] -> item 1 a < item 1 b ] my-list
для сортировки основного списка по определенному атрибуту, взятому из подсписка. Затем вы можете использовать item 0 best-by-1
, чтобы получить сам автомобиль.
При этом, если вы хотите использовать NetLogo в полной мере, вам, вероятно, следует создать автомобильную породу:
breed [ cars car ]
cars-own [
attribute-1
attribute-2
]
breed [ agents an-agent ]
agents-own [ my-list ]
to setup
clear-all
create-agents 3 [
set my-list [] ; start with empty list
hatch-cars 5 [
set attribute-1 precision (random-float 1) 2
set attribute-2 precision (random-float 1) 2
let this-car self
ask myself [ set my-list fput this-car my-list ]
]
]
ask agents [
show my-list
print " Best car by attribute 1:"
let best-by-1 max-one-of turtle-set my-list [ attribute-1 ]
print (word " " best-by-1 ", attribute-1 = " [ attribute-1 ] of best-by-1)
print " Best car by attribute 2:"
let best-by-2 max-one-of turtle-set my-list [ attribute-2 ]
print (word " " best-by-2 ", attribute-1 = " [ attribute-2 ] of best-by-2)
]
end
Примитив max-one-of
позволяет легко выбрать лучший автомобиль, и все остальное, вероятно, также будет проще, если вы работаете с агентами вместо списков.