在 tableview 中对动态部分进行排序 |迅速
Posted
技术标签:
【中文标题】在 tableview 中对动态部分进行排序 |迅速【英文标题】:Issue sorting dynamic sections in tableview | Swift 【发布时间】:2021-11-03 18:32:18 【问题描述】:如何对从datestamp
字段动态生成的以下部分进行排序?例如2021-11-3
的部分需要显示在2021-11-2
上方的tableview中
数据戳格式: 2021-11-3
var sections = [mySections]()
var structure = [myStructure]()
private func fetchJSON()
guard let url = URL(string: "test.com")
else return
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = "id=\1".data(using: .utf8)
URLSession.shared.dataTask(with: request) data, _, error in
guard let data = data else return
do
let decoder = JSONDecoder()
self.structure.sort $0. datestamp > $1.datestamp
let res = try decoder.decode([myStructure].self, from: data)
let grouped = Dictionary(grouping: res, by: $0. datestamp )
let keys = grouped.keys.sorted()
self.sections = keys.map(mySections(date: $0, items: grouped[$0]!
))
DispatchQueue.main.async
self.tableView.reloadData()
catch
print(error)
.resume()
我尝试在self.sections
下执行以下操作,但它没有做任何事情:
self.sections.sorted $0.date > $1.date
结构:
struct mySections
let date : String
var items : [myStructure]
struct myStructure: Decodable
let recordid: Int
let testname: Int
let datestamp: String
数据示例:
[
"recordid": 1,
"testname": "Jen",
"datestamp": "2021-11-3"
,
"recordid": 1,
"testname": "Jake",
"datestamp": "2021-11-2"
]
【问题讨论】:
不清楚mySections
的date
字段是否设置准确——你还没有包含routeSections
。您能否提供您的 JSON 以及使其成为 minimal reproducible example 所需的剩余代码?
请看更新后的帖子
感谢您的帮助 - 请您看一下其他帖子,感谢您的帮助。 ***.com/questions/69860143/…
【参考方案1】:
现在,您正在根据dateTimeStamp
对structure
进行排序,这没有任何作用,因为structure
中没有任何数据。
在我的游乐场示例中,就像您的代码一样,我使用了Dictionary(grouped:)
。然后,我将map
那些结果通过date
发送给mySections
和sort
。
最后print
的结果是:
[“2021-11-4”、“2021-11-3”、“2021-11-2”]
let data = """
[
"recordid": 1,
"testname": "Jake",
"datestamp": "2021-11-2"
,
"recordid": 2,
"testname": "Jen",
"datestamp": "2021-11-3"
,
"recordid": 3,
"testname": "Bob",
"datestamp": "2021-11-3"
,
"recordid": 4,
"testname": "Bill",
"datestamp": "2021-11-4"
]
""".data(using: .utf8)!
struct mySections
let date : String
var items : [myStructure]
struct myStructure: Decodable
let recordid: Int
let testname: String
let datestamp: String
var sections = [mySections]()
var structure = [myStructure]()
do
let decoder = JSONDecoder()
let res = try decoder.decode([myStructure].self, from: data)
let grouped = Dictionary(grouping: res, by: $0.datestamp )
sections = grouped.map mySections(date: $0.key, items: $0.value)
.sorted $0.date > $1.date
print(sections.map(\.date))
catch
print(error)
可能值得注意的是,现在您的日期以统一的格式存储,非常适合基于字符串的排序。但是,如果您的端点返回的日期格式不统一(例如 2021-11-04
和 2021-11-3
),您可能需要先转换为实际的 Date
并以此为基础进行排序。
【讨论】:
以上是关于在 tableview 中对动态部分进行排序 |迅速的主要内容,如果未能解决你的问题,请参考以下文章