如何将分组字典映射到Section结构体实现UITableView分组展示
问题:UITableView分组数据映射到Section结构体
背景与现有实现
我有一个二维数组tempCalculatorArray [[String]],每个元素固定包含两个字符串(如"AMT"和"Simple scoring system"),需要在UITableView中按第一个字符串的首字母分组展示。
目前已完成分组和键排序的代码:
let groupedDictionary = Dictionary(grouping: tempCalculatorArray, by: { $0[0].prefix(1) } ) let keys = groupedDictionary.keys.sorted()
输出结果符合预期:
keys = ["A", "C", "G", "N", "T", "W"] groupedDictionary = [ "G": [ ["GCS", "Some basic description text"], ], "N": [ ["NEWS2", "Some basic description text"], ], "A": [ ["AMTS", "Some very basic description text"], ["AUDIT-C", "Some really basic description text"], ], "W": [ ["WELLS DVT", "Some basic description text"], ["WELLS PE", "Some basic description text"], ], "T": [ ["TRUELOVE WITTS", "Some basic description text"], ], "C": [ ["CURB65", "Some basic description text"], ] ]
我定义了一个Section结构体用于存储表格所需数据:
struct Section { let letter : String let title : String let tagline : String }
但尝试将分组字典映射到该结构体时持续报错,错误代码如下:
sections = keys.map { Section( letter: $0, title: groupedDictionary[$0]![$0].sorted(), tagline: groupedDictionary[$0]![$1].sorted() ) }
解决方案
问题根源
原Section结构体设计不符合分组需求:每个首字母分组下包含多个条目,而当前结构体仅能存储单个title和tagline,无法容纳一组数据。需要调整结构体结构,让每个Section对应一个分组,同时包含该分组下的所有条目。
修正后的结构体定义
// 定义单个计算器条目结构体,存储标题和描述 struct CalculatorItem { let title: String let tagline: String } // 调整Section结构体,包含分组首字母和该组的所有条目 struct Section { let letter: String let items: [CalculatorItem] }
正确的映射代码
var sections: [Section] = keys.map { key in // 获取当前分组下的所有二维数组元素,为空时返回空数组 let calculatorPairs = groupedDictionary[key] ?? [] // 将每个二维数组元素转换为CalculatorItem实例 let items = calculatorPairs.map { pair in CalculatorItem(title: pair[0], tagline: pair[1]) } // 返回当前分组的Section实例 return Section(letter: key, items: items) }
可选:组内条目排序
如果需要对每组内的条目按标题字母排序,可在生成items时添加排序逻辑:
let items = calculatorPairs.map { pair in CalculatorItem(title: pair[0], tagline: pair[1]) }.sorted { $0.title < $1.title }
调整后,每个Section对应一个UITableView分组,items数组包含该分组下的所有条目,完全适配表格的分组展示逻辑。
内容的提问来源于stack exchange,提问作者Nicholas Farmer
相关产品推荐
相关产品推荐

