Swift中如何将BrowseItem数组转换为[BrowseSection: [BrowseItem]]字典?
Swift: 将BrowseItem数组按Section分组为字典
因为你的BrowseSection已经遵循了Hashable协议,所以可以直接利用Swift标准库的分组能力实现需求,以下是两种常用方案:
方法一:使用Dictionary(grouping:by:)初始化器(推荐)
这是Swift 4+提供的简洁API,直接按指定键对数组元素分组:
// 假设你已有输入数组 let browseItems: [BrowseItem] = [...] // 按section属性分组生成目标字典 let myDict: [BrowseSection: [BrowseItem]] = Dictionary(grouping: browseItems, by: { $0.section })
方法二:使用reduce(into:)手动构建字典
如果需要在分组过程中添加额外逻辑(比如过滤元素、修改元素等),可以用reduce手动构建:
let browseItems: [BrowseItem] = [...] let myDict = browseItems.reduce(into: [BrowseSection: [BrowseItem]]()) { dict, item in // 利用字典的default值避免空数组判断 dict[item.section, default: []].append(item) }
注意事项
默认情况下,BrowseSection的自动合成Hashable实现会比较所有存储属性(包括可选的id),只有当两个BrowseSection的所有属性值都相等时,才会被视为同一个字典键。如果需要自定义分组规则,可以手动实现hash(into:)和==方法。
内容的提问来源于stack exchange,提问作者David Henry
相关产品推荐
相关产品推荐

