我想按日期对数据进行分组,因此我创建了自定义词典[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
这个问题说字典,但你正在尝试排序一个数组。 –