データを日付でグループ化したいので、私のデータを追跡するためにカスタム辞書[String: [myData]]
を作成します。 (キーは日付の値をStringに格納しています)また、私が得た辞書はであることが分かりましたです。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
質問には辞書がありますが、あなたは配列をソートしようとしています。 –