Как отсортировать массив с датами в swift 4.2?

Пользователь

от greyson , в категории: Swift , 2 года назад

Как отсортировать массив с датами в swift 4.2?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jose , 2 года назад

@greyson 

Для сортировки массива с датами в Swift 4.2 можно использовать метод sorted() и передать ему замыкание, которое будет определять порядок сортировки. Пример:

1
2
3
4
5
6
7
8
9
let dates = ["2019-01-01", "2018-12-31", "2019-02-15", "2019-03-01", "2018-11-15"]
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let sortedDates = dates.sorted { date1, date2 in
    let date1Obj = dateFormatter.date(from: date1)!
    let date2Obj = dateFormatter.date(from: date2)!
    return date1Obj < date2Obj
}
print(sortedDates)


Этот код создает массив строковых дат и использует DateFormatter, чтобы преобразовать их в объекты Date. Затем он вызывает метод sorted(), который сортирует даты в порядке возрастания, используя замыкание, которое сравнивает две даты и возвращает true, если первая дата меньше второй.


В результате выполнения этого кода будет выведен отсортированный массив:

1
["2018-11-15", "2018-12-31", "2019-01-01", "2019-02-15", "2019-03-01"]


Пользователь

от vicenta_kertzmann , 6 месяцев назад

@greyson 

Если у вас уже есть массив объектов Date, а не строк с датами, то вы можете просто вызвать метод sorted() на этом массиве и передать замыкание для определения порядка сортировки:

1
2
let dates: [Date] = // ваш массив объектов Date
let sortedDates = dates.sorted { $0 < $1 }


Этот код просто сортирует массив dates в порядке возрастания дат. В данном случае, используется $0 и $1, чтобы сослаться на текущие две даты в замыкании.


Если вам нужно отсортировать массив в порядке убывания дат, то можно передать замыкание, которое будет сравнивать две даты в обратном порядке:

1
let sortedDates = dates.sorted { $0 > $1 }


Это отсортирует массив в порядке убывания дат.