如何从 swift 中的结构对 TableView 项目进行分组?
How can I group TableView items from a struct in swift?
在我的例子中,我有数据结构,我想在表视图中使用值 _host 到 titleForHeaderInSection 并按 _host 数据分组
var polozkyuctu = [polozky]()
struct polozky: Codable {
let _id: Int
let _recept: String
let _host: String
}
Data in polozkyuctu:
[Cheers.Ucet.polozky(_id: 453741, _recept: "BECHEROVKA 1L", _host: "0"),
Cheers.Ucet.polozky(_id: 453718, _recept: "PALAČINKY DEZERT", _host: "10“),
Cheers.Ucet.polozky(_id: 453719, _recept: "TLAČENKA SVĚTLÁ S CIBULÍ", _host: "10“),
Cheers.Ucet.polozky(_id: 453720, _recept: "PAŠTIKA JÁTROVÁ", _host: "0"),
Cheers.Ucet.polozky(_id: 453737, _recept: "ABSINTH ŽUFÁNEK 0,5L", _host: "2")]
extension Ucet: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
let hh = Dictionary(grouping: polozkyuctu, by: { (element: polozky) in
return element._host })
print ("hostcount: \(hh.count)")
// hostcount: 3
return hh.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return ???
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return „Title \(???)“
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
???
return cell
}
如何正确地适应“部分”以便结果在数据表中看起来像这样?
标题 0
BECHEROVKA 1L
肝膏
标题 2
苦艾酒连衣裙 0.5L
标题 10
煎饼甜点
洋葱灯按钮
除非你有一个庞大的数据集,否则你应该转换你的数组,以便你可以轻松地读出所需的值:
struct Polozky: Codable {
let _id: Int
let _recept: String
let _host: String
}
let data = [Polozky(_id: 453741, _recept: "BECHEROVKA 1L", _host: "0"),
Polozky(_id: 453718, _recept: "PALAČINKY DEZERT", _host: "10"),
Polozky(_id: 453719, _recept: "TLAČENKA SVĚTLÁ S CIBULÍ", _host: "10"),
Polozky(_id: 453720, _recept: "PAŠTIKA JÁTROVÁ", _host: "0"),
Polozky(_id: 453737, _recept: "ABSINTH ŽUFÁNEK 0,5L", _host: "2")]
// transform your data
let grouped = Dictionary(grouping: data, by: { [=10=]._host })
let sorted = grouped.sorted { [=10=].key.localizedStandardCompare(.key) == .orderedAscending }
// now easily get you datasource values like so
let someSection = 1
let sectionTitle = sorted[someSection].key // "2"
let sectionRowCount = sorted[someSection].value.count // 1
在我的例子中,我有数据结构,我想在表视图中使用值 _host 到 titleForHeaderInSection 并按 _host 数据分组
var polozkyuctu = [polozky]()
struct polozky: Codable {
let _id: Int
let _recept: String
let _host: String
}
Data in polozkyuctu:
[Cheers.Ucet.polozky(_id: 453741, _recept: "BECHEROVKA 1L", _host: "0"),
Cheers.Ucet.polozky(_id: 453718, _recept: "PALAČINKY DEZERT", _host: "10“),
Cheers.Ucet.polozky(_id: 453719, _recept: "TLAČENKA SVĚTLÁ S CIBULÍ", _host: "10“),
Cheers.Ucet.polozky(_id: 453720, _recept: "PAŠTIKA JÁTROVÁ", _host: "0"),
Cheers.Ucet.polozky(_id: 453737, _recept: "ABSINTH ŽUFÁNEK 0,5L", _host: "2")]
extension Ucet: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
let hh = Dictionary(grouping: polozkyuctu, by: { (element: polozky) in
return element._host })
print ("hostcount: \(hh.count)")
// hostcount: 3
return hh.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return ???
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return „Title \(???)“
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
???
return cell
}
如何正确地适应“部分”以便结果在数据表中看起来像这样?
标题 0
BECHEROVKA 1L
肝膏
标题 2
苦艾酒连衣裙 0.5L
标题 10
煎饼甜点
洋葱灯按钮
除非你有一个庞大的数据集,否则你应该转换你的数组,以便你可以轻松地读出所需的值:
struct Polozky: Codable {
let _id: Int
let _recept: String
let _host: String
}
let data = [Polozky(_id: 453741, _recept: "BECHEROVKA 1L", _host: "0"),
Polozky(_id: 453718, _recept: "PALAČINKY DEZERT", _host: "10"),
Polozky(_id: 453719, _recept: "TLAČENKA SVĚTLÁ S CIBULÍ", _host: "10"),
Polozky(_id: 453720, _recept: "PAŠTIKA JÁTROVÁ", _host: "0"),
Polozky(_id: 453737, _recept: "ABSINTH ŽUFÁNEK 0,5L", _host: "2")]
// transform your data
let grouped = Dictionary(grouping: data, by: { [=10=]._host })
let sorted = grouped.sorted { [=10=].key.localizedStandardCompare(.key) == .orderedAscending }
// now easily get you datasource values like so
let someSection = 1
let sectionTitle = sorted[someSection].key // "2"
let sectionRowCount = sorted[someSection].value.count // 1