Ich möchte meine Daten nach Datum gruppieren, so erstellen ich ein Benutzerwörterbuch [String: [myData]]
, um meine Daten zu verfolgen. (Der Schlüssel speichert den Wert des Datums in String.) Außerdem habe ich festgestellt, dass das Wörterbuch unsortiert ist.Sortieren Benutzerwörterbuch mit Swift 3
Ich habe .sorted(by:)
verwendet, um mein Wörterbuch zu sortieren, jedoch gibt es eine andere Datenstruktur [(key: String, value: [myData])]
statt, was ich erwartet [String: [myData]]
, irgendeine Idee?
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
}
Wörterbücher sind ungeordnete Sammlungen. Wenn Sie eine Sammlung mit Bestellung wünschen, sollten Sie vielleicht eine andere Art von Sammlung verwenden, z. ein Array von Tupeln (wobei "tupleElement.0" "key" und "tupleElement.1" "value" entsprechen würde, wobei Letzteres dazu verwendet werden könnte, das Array zu sortieren). – dfri
Oh ich sehe. Ich werde es versuchen. ty – WeiJay
Die Frage sagt Wörterbuch, aber Sie versuchen, ein Array zu sortieren. –