ОБНОВЛЕНИЕ - Я обнаружил некоторую "серую область" вокруг ограничений, которые я цитирую для метода sort
, который я разъясняю ...
Добро пожаловать в переполнение стека.
Основываясь на обсуждении в комментариях, у меня есть более четкое представление о том, что вы пытаетесь сделать.Тем не менее, ключевой элемент высококачественного вопроса заключается в том, что в нем есть пример, демонстрирующий ожидаемое поведение ( и показывают, как это поведение отличается от результатов, полученных при использовании методов).В настоящее время я вижу один пример, который не демонстрирует никакой разницы в результатах «сортировки по расстоянию».Хотя вы отдельно описываете, почему «сортировка по расстоянию» - это не то, что вам нужно, должен быть представлен пример, демонстрирующий эту разницу.
Поскольку такого примера нет (даже после того, как один был запрошен), я 'Я предоставлю большую часть ответа с предоставленной информацией, насколько это возможно, но это будет сопровождаться напоминанием о том, что в SO качество ответов будет зависеть от качества вопроса.
Итак, что яМожно определенно сказать, что вы сталкиваетесь с границами того, что может сделать метод sort
.
Когда вы предоставляете функцию упорядочения для sort
, она должна иметь возможность смотреть на любые два элемента и говорить «этот должен идти раньше этого», без необходимости контекста (например, является ли 3-й элементсоответствие определенным критериям может существовать).(В некоторых случаях есть небольшое пространство, чтобы обойти это ограничение, о котором я расскажу через минуту.)
Так, например, если у вас было
- A: ПИКАП А С ДИСТАНЦИЕЙ 5
- B: СНИЖЕНИЕ А С ДИСТАНЦИЕЙ 1
- C: ПИКАП B С ДИСТАНЦИЕЙ 3
сравнениеФункция, присвоенная sort
, должна иметь возможность просматривать B
и C
и, не зная, что A
существует или не существует, решить, стоит ли B
перед C
в списке.Точно так же он должен уметь сравнивать A
и C
без каких-либо знаний о B
.И результаты должны быть непротиворечивыми, так что если он говорит x>y
и y>z
, то он также должен сказать x>z
.
Глядя только на A
и C
, может показаться C
должно прийти первым.
Глядя только на B
и C
, может показаться, что B
должно стоять на первом месте.
Глядя на A
и B
, мы знаем, что A
должноприходите первым.
A > C > B > A
Таким образом, не может быть последовательного правила упорядочения, к которому может применяться алгоритм sort
.
Но как насчет этой комнаты для ласки?Хорошо, когда вы передаете A
и C
в функцию сортировки, вы могли бы кодировать существование B
в состоянии A
A = {
"type": "PICKUP"
, "peer": B
, "distance": 5
}
B = {
"type": "DROPOFF"
, "peer": "A"
, "distance": 1
}
// ...
Теперь выможете написать свою функцию сравнения для учета значения расстояния B
при сравнении A
с C
.Но обратите внимание, что сравнение все еще не работает в контексте того, что 'B
также находится в списке - and in fact, this will behave the same *whether or not
B is in the list*, because you have set
A to a state which, according to your own rules, implies that
B` должно быть в списке.
Но это возвращает нас к одной и той же точке ...
Причина, по которой я продолжаю использовать пример, состоит в том, что, как только пришло время устранить эти расхождения, есть несколько способов сделать это, что приводит кочень разные порядки узлов.И вам нужно , чтобы подумать о том, как вы хотите, чтобы те, которые были решены, были достаточно подробны, чтобы предоставить запрошенный пример. И как только вы это сделаете, вам больше не нужно будет предоставлять пример, потому что решение, скорее всего, представит себя.*
Что я подозреваю вам нужно сделать, это отсортировать только пикапы, затем пройтись по списку, на каждом узле, определяя, лучше ли переходить к следующему пикапу или завершить одно из выпаденийдля чего-то, что вы уже подобрали.
Или, может быть, у вас есть какое-то непротиворечивое правило, по которому вы можете сравнить, например, данный звукосниматель (и соответствующий ему выпадение) с несвязанным выпадением (исоответствующий звукосниматель) и из этого выведите стабильные / согласованные значения порядка.
Но с учетом данной информации, это только предположение.