Я хочу сгруппировать свои данные по дате, поэтому я создаю собственный словарь [String: [myData]]
для отслеживания моих данных. (Ключ хранит значение даты в String.) Кроме того, я обнаружил, что словарь, который я получил, это unsorted.Сортировка пользовательского словаря с помощью swift 3
Я использовал .sorted(by:)
для сортировки моего словаря, однако он возвращает другую структуру данных [(key: String, value: [myData])]
вместо того, что я ожидал [String: [myData]]
, любая идея?
struct myData {
var name: String
var date: Date
init(name: String, date: Date) {
self.name = name
self.date = date
}
}
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "YYYY-MM-dd"
let x1 = myData(name: "a", date: dateFormatter.date(from: "2016-10-15")!)
let x2 = myData(name: "b", date: dateFormatter.date(from: "2016-10-15")!)
let x3 = myData(name: "z", date: dateFormatter.date(from: "2016-10-12")!)
let x4 = myData(name: "d", date: dateFormatter.date(from: "2016-10-31")!)
let x5 = myData(name: "c", date: dateFormatter.date(from: "2016-10-07")!)
let x6 = myData(name: "f", date: dateFormatter.date(from: "2016-10-06")!)
var myArr = [x1, x2, x3, x4, x5, x6]
var myArrayByDate = [String: [myData]]()
for item in myArr {
let date = dateFormatter.string(from: item.date)
myArrayByDate[date] == nil ? myArrayByDate[date] = [item] : myArrayByDate[date]?.append(item)
}
print(myArrayByDate) // unsorted
// Sorting
// sortedArray: [(key: String, value: [myData])]
let sortedArray = myArrayByDate.sorted { (s1, s2) -> Bool in
if let d1 = dateFormatter.date(from: s1.key),
let d2 = dateFormatter.date(from: s2.key) {
if d1.compare(d2) == .orderedDescending {
return true
}
}
return false
}
Словари - это неупорядоченные коллекции. Если вам нужна коллекция с заказом, возможно, вам следует использовать другой тип коллекции, например. массив кортежей (где 'tupleElement.0' соответствует« key »и« tupleElement.1 »« value », где последний может использоваться для сортировки массива). – dfri
О, я вижу. Я попробую. ty – WeiJay
Вопрос говорит словарь, но вы пытаетесь сортировать массив. –