Любой способ сортировки пользовательских объектов внутри массива? - PullRequest
0 голосов
/ 06 апреля 2019

У меня есть этот массив

var bookTimeArray = [BookTime]()

Класс BookTime содержит следующие элементы:

var time : String = ""
var status : String = ""
var booked_by : String = ""

Теперь мне нужно отсортировать массив bookTimeArray, увидев переменную BookTime.time.

Переменная времени может содержать одно время с «12:00» до «11:00»

Объект необходимо отсортировать по следующей схеме

["12AM", "1AM", "2AM", "3AM", "4AM", "5AM", "6AM", "7AM", "8AM", "9AM", "10AM", "11AM", "12PM", "1PM", "2PM", "3PM", "4PM", "5PM", "6PM", "7PM", "8PM", "9PM","10PM", "11PM"]

, если bookTimeArray имеет 5 объектов

bookTimeArray[0].time = "10AM"
bookTimeArray[1].time = "6AM"
bookTimeArray[2].time = "9AM"
bookTimeArray[3].time = "6PM"
bookTimeArray[4].time = "9PM"

Ожидаемый результат

bookTimeArray[0].time = "6AM"
bookTimeArray[1].time = "9AM"
bookTimeArray[2].time = "10AM"
bookTimeArray[3].time = "6PM"
bookTimeArray[4].time = "9PM"

Я не могу понять, как этого добиться. Помоги мне: (

Ответы [ 3 ]

0 голосов
/ 06 апреля 2019

Вы можете использовать dateFormatter для создания Date объектов из вашего свойства String, а затем вы можете отсортировать ваш массив по этим Date s

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "ha" // format 1AM, 2AM, 12PM, ...
dateFormatter.locale = Locale(identifier: "en_US_POSIX")

Сортировка:

bookTimeArray.sort { bookTime1, bookTime2 in
    guard let date1 = dateFormatter.date(from: bookTime1.time), let date2 = dateFormatter.date(from: bookTime2.time) else { return false }
    return date1 < date2
}
0 голосов
/ 08 апреля 2019

Надеюсь, это поможет:

// Custom models array   
 let dataArray = [Class(fileID:1),Class(fileID:2),Class(fileID:3)]
// here is sorting code
    dataArray.sorted({ $0.fileID > $1.fileID })
0 голосов
/ 06 апреля 2019

Вы можете сделать это так:

// First create a DateFormatter object to convert your time strings to Date objects so you can compare between them.
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "ha"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")

// Then you only need to sort the bookTimeArray by *time* property after converting *time* string to a Date object using the dateFormatter that we've created above.
let sortedBooks = bookTimeArray.sorted { dateFormatter.date(from: $0.time)! < dateFormatter.date(from: $1.time)! }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...