Сортировка строк времени (ЧЧ: мм) в порядке возрастания в Swift - PullRequest
0 голосов
/ 28 июня 2018

Я хочу отсортировать массив раз в порядке возрастания с 00:00 -> 23:59 в Swift 4. У моего приложения нет ссылок на календарь, так как он используется для регистрации времени будильника с помощью внешних аппаратных часов. как очень простой сигнал тревоги, который просто срабатывает с 00:00 -> 23:59, затем оборачивается.

Не уверен, что это лучший подход, но я пробовал следующий код, основанный на Сортировка объектов в массиве по дате но я не могу заставить его работать только со временем. (Дата) объект не может инициализироваться. Он не любит изменения (dateStyle) и (timeStyle) по сравнению с первоначальным примером. Код ниже:

let testArray = ["23:59", "01:23", "18:23", "04:42", "00:00"]
  var convertedArray: [Date] = []

  var dateFormatter = DateFormatter()
  dateFormatter.dateFormat = "HH:mm"
  dateFormatter.dateStyle = .none
  dateFormatter.timeStyle = .short

  for dat in testArray {
     let date = dateFormatter.date(from: dat)
     if let date = date {
        convertedArray.append(date)
     }
  }

  var ready = convertedArray.sorted(by: { $0.compare($1) == .orderedAscending })

  print(ready)

При работе функции печати следует печатать отсортированный массив в следующем порядке:

[00:00, 01:23, 04:42, 18:23, 23:59]

У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 28 июня 2018

Вам не нужно конвертировать строки в даты. Просто отсортируйте строки как числа.

let testArray = ["23:59", "01:23", "18:23", "04:42", "00:00"]
let sortedArray = testArray.sorted { $0.localizedStandardCompare($1) == .orderedAscending }
print(sortedArray)

Выход:

["00:00", "01:23", "04:42", "18:23", "23:59"]

Как оказалось, поскольку каждая из ваших временных строк имеет хороший фиксированный формат HH:mm, вам даже не нужно использовать localizedStandardCompare. Вы получаете желаемые результаты с:

let sortedArray = testArray.sorted()

Это работает только потому, что у вас есть только цифры и числа дополняются начальными нулями. Если бы ни одного из этих случаев не было, вам понадобится первый вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...