Сортировка массива Swift VS сортировка Java (управление неизвестными случаями)JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Сортировка массива Swift VS сортировка Java (управление неизвестными случаями)

Сообщение Anonymous »

Комментарий от Java: я пытаюсь найти способ быстрой сортировки массива, как я это сделал с Java. Но после некоторых попыток выяснилось, что поведение (не говоря уже об интерфейсе API) другое.
В Java я делал что-то вроде:

Код: Выделить всё

myArray.sort( new Comparator() {
public int compare(MyClass obj1, MyClass obj2) {
... (return 1, -1, or zero)
}
}
А если бы я вернул ноль, это было бы типа: «Я не знаю, давайте посмотрим, как это сравнится с другими объектами». Это означает, что ноль не означает, что obj1 и obj2 обязательно вместе, но результат сравнения не определен.
В Swift существует простой синтаксис:

Код: Выделить всё

myArray.sort(by: {
... (return true or false)
})
Но это означает, что я всегда могу определить, являются ли объекты > или ComparisonResult {
... (return .orderedAscending, .orderedDescending, or .orderedSame)
}
}
[/code]
Но здесь .orderedSame, похоже, ведет себя по-другому: когда идентифицируются два объекта .orderedSame, они считаются находящимися на одном уровне, и сортировщик больше не будет пытаться сравнить их с другими элементы.
Есть ли в Swift что-то, позволяющее получить тот же алгоритм, что и в Java, с возможностью сказать «эти два элемента несопоставимы»?
Примером использования является случай, когда, имея набор объектов с зависимостями (дерево), у нас есть все узлы в массиве, и мы хотим упорядочить узлы в зависимости от зависимостей (сначала корень дерева, а затем мы уверены, что мы никогда не помещаем узел A перед другим узлом B, если B зависит от A.
Например:

Код: Выделить всё

struct Node {
let subNodes: [Node]
}

let node1_1 = Node(subNodes: [])
let node1_2 = Node(subNodes: [])
let node2_1 = Node(subNodes: [])
let node2_2 = Node(subNodes: [])
let node1 = Node(subNodes: [node1_1, node1_2])
let node2 = Node(subNodes: [node2_1, node2_2])
let nodeRoot = Node(subNodes: [node1, node2])
let allNodes: [Node] = [node2_2, node1_1, node1, node1_2, nodeRoot, node2_1, node2]

]
ожидается:

Код: Выделить всё

nodeRoot, node1, node1_1, node1_2, node2, node2_1, node2_2
или

Код: Выделить всё

nodeRoot, node1, node2, node1_1, node1_2, node2_1, node2_2
...
но не

Код: Выделить всё

nodeRoot, node1, node2_2, node2, node1_1, node1_2, node2_1
(это я сейчас получаю быстро, потому что сортировщик сравнивает node1 и node2_2, не нашел точки сравнения и возвращает .orderedSame, который затем объединяет их, что бы ни случилось дальше.
Надеюсь, я понятно
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/786 ... management
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»