сортировать два строковых массива соответственно в быстрой - PullRequest
0 голосов
/ 21 октября 2019

Я ищу простой способ сортировки 2 массивов, один из которых содержит даты, а другой содержит время для каждой конкретной даты (дата в первом месте ar1 совпадает со временем в первом месте ar2)

var ar1 = ["2014-02-13", "2016-03-01", "2015-03-17", "2014-04-02", "2014-04-18"]
var ar2 = ["08:11:57", "08:11:43", "08:11:34", "08:11:18", "08:11:01"]
ar1.sort()
print(ar1)

вывод: ["2014-02-13", "2014-04-02", "2014-04-18", "2015-03-17", "2016-03-01 "]

Мне нужно, чтобы ar2 изменился соответственно на ar1

ar2 needs to be : ["08:11:57", "08:11:18", "08:11:01", "08:11:34", "08:11:43"]

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Вы можете zip(_:_:) оба массива ar1 и ar2 и вызывать sorted(_:) в результирующем массиве на основе ar1, то есть

let result = zip(ar1, ar2).sorted { $0.0 < $1.0 }

let sortedAr1 = result.map({ $0.0 }) //["2014-02-13", "2014-04-02", "2014-04-18", "2015-03-17", "2016-03-01"]

let sortedAr2 = result.map({ $0.1 }) //["08:11:57", "08:11:18", "08:11:01", "08:11:34", "08:11:43"]

Вместо использования zip вы также можете создать array из struct/class экземпляров, в которых каждый экземпляр хранит соответствующие элементы из ar1 и ar2. Затем sort, что array на основе значений ar1.

Это лучший подход, если вы согласны с изменением структуры с 2 String arrays на одну structarray.

0 голосов
/ 21 октября 2019

Создайте структуру или класс для хранения данных. Затем создайте массив этого класса / структуры и отсортируйте его по дате.

struct MyDates {
   var date: String
   var time: String
}

let date1 = MyDates(date: "2014-02-13", time: "08:11:57")
let date2 = MyDates(date: "2016-03-01", time: "08:11:43")

var arrayDate = [date2, date1]
arrayDate.sort { $0.date < $1.date }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...