日付情報を持っているデータをDB等から取得し、それを新しい順に月毎にsectionを分けてtableViewに表示したいと考えています。
下記の様なデータの場合、どうすれば実現できますでしょうか?
Swift
1let result = [ 2 ["image": "", "price": "22", "name": "東京", "date": "2019-12-31 12:21:21"], 3 ["image": "", "price": "21", "name": "千葉", "date": "2019-12-04 12:34:56"], 4 ["image": "", "price": "20", "name": "埼玉", "date": "2019-11-23 08:01:58"], 5 ["image": "", "price": "32", "name": "滋賀", "date": "2019-05-05 08:01:58"], 6 ["image": "", "price": "33", "name": "京都", "date": "2019-04-10 08:01:58"], 7 ["image": "", "price": "31", "name": "大阪", "date": "2019-04-10 08:01:58"], 8 ["image": "", "price": "30", "name": "兵庫", "date": "2018-12-12 08:01:58"], 9]
ひとまず、Dictinary型にgroupingと言うものがあるのがわかったので、それで何とか出来そうな感じはするのですが、元々のデータが年月だけであれば実現出来そうなものの、時分秒まであると年月だけのフォーマットにしてからでないとグルーピング出来ない様な気がします。フォーマットの仕方はなんとなく分かりましたが、それを組み合わせる方法が分かりません。
Swift
1let df = DateFormatter() 2df.locale = Locale(identifier: "en_US_POSIX") 3df.calendar = Calendar(identifier: .gregorian) 4df.dateFormat = "yyyy-MM-dd HH:mm:ss" 5let res = Dictionary(grouping: result, by: { 6 df.string(from: df.date(from: $0["date"]!)!) 7})
また、仮に上記のコードが上手く動くようになったとして、並び順が新しいもの順に保証された形にする事は可能なのでしょうか?
期待する結果(よくわからないので形は適当です)
let res = [ ["2019-12": [ ["image": "", "price": "22", "name": "東京", "date": "2019-12-31 12:21:21"], ["image": "", "price": "21", "name": "千葉", "date": "2019-12-04 12:34:56"], ], ["2019-11": [ ["image": "", "price": "20", "name": "埼玉", "date": "2019-11-23 08:01:58"], ], ["2019-05": [ ["image": "", "price": "32", "name": "滋賀", "date": "2019-05-05 08:01:58"], ], ["2019-04": [ ["image": "", "price": "33", "name": "京都", "date": "2019-04-10 08:01:58"], ["image": "", "price": "31", "name": "大阪", "date": "2019-04-10 08:01:58"], ], ["2018-12": [ ["image": "", "price": "30", "name": "兵庫", "date": "2018-12-12 08:01:58"], ] ]
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/16 03:25