Swift с 2 по 4
Исходный ответ искал сортировку массива пользовательских объектов с использованием некоторого свойства. Ниже я покажу вам несколько удобных способов сделать то же самое поведение с быстрыми структурами данных!
Мало что уходит в путь, я немного изменил ImageFile. Имея это в виду, я создаю массив с тремя файлами изображений. Обратите внимание, что метаданные являются необязательным значением, проходящим в нуле, поскольку ожидается ожидаемый параметр.
struct ImageFile {
var name: String
var metadata: String?
var size: Int
}
var images: [ImageFile] = [ImageFile(name: "HelloWorld", metadata: nil, size: 256), ImageFile(name: "Traveling Salesmen", metadata: "uh this is huge", size: 1024), ImageFile(name: "Slack", metadata: "what's in this stuff?", size: 2048) ]
ImageFile имеет свойство с именем size. В следующих примерах я покажу вам, как использовать операции сортировки w / properties, такие как размер.
от самого маленького до самого большого размера (& lt;)
let sizeSmallestSorted = images.sorted { (initial, next) -> Bool in
return initial.size < next.size
}
от самого большого до наименьшего (>)
let sizeBiggestSorted = images.sorted { (initial, next) -> Bool in
return initial.size > next.size
}
Далее мы Выделите имя свойства String. Аналогичным образом используйте сортировку для сравнения строк. Но обратите внимание, что внутренний блок возвращает результат сравнения. Этот результат определит sort.
AZ (.orderedAscending)
let nameAscendingSorted = images.sorted { (initial, next) -> Bool in
return initial.name.compare(next.name) == .orderedAscending
}
ZA (.orderedDescending)
let nameDescendingSorted = images.sorted { (initial, next) -> Bool in
return initial.name.compare(next.name) == .orderedDescending
}
Далее мой любимый способ сортировки , во многих случаях у вас будут дополнительные свойства. Теперь не волнуйтесь, мы собираемся сортироваться так же, как и выше, за исключением того, что мы должны обрабатывать ноль! В производстве;
Я использовал этот код, чтобы заставить все экземпляры в моем массиве с последними значениями свойств nil. Затем заказывайте метаданные с использованием предполагаемых разворачиваемых значений.
let metadataFirst = images.sorted { (initial, next) -> Bool in
guard initial.metadata != nil else { return true }
guard next.metadata != nil else { return true }
return initial.metadata!.compare(next.metadata!) == .orderedAscending
}
Возможно наличие вторичного сорта для опций. Например; можно показать изображения с метаданными и упорядочить по размеру.