首页 > 解决方案 > 使用结构数组子集的 Swift 字典

问题描述

我正在尝试使用分组从结构数组创建字典,但我运气不佳(我找到了一种遍历每条记录的方法,但希望有一个更优雅的解决方案)......

var eventRecords =  [EventRecord]()

并且结构看起来像这样(用于在 CloudKit 中存储记录)

public struct EventRecord {
    public var evDate: Date
    public var evType: Int
    public var evMainTxt: String
    public var evNote: String?
    public var evVal1: Int?
    public var evVal2: Int?
}

我希望完成的是一个字典,其中键是 evType是 [evMainTxt]。字典定义为

var suggestionsDict = [Int: [String]]()

我开始了,Dictionary(grouping: eventRecords, by: {$0.evType})但我正在努力处理.map这个语句的一部分,Dictionary(grouping: eventRecords, by: {$0.evType}).map因为我只想要 EventRecord 结构的一个子集。可以不遍历所有记录来完成吗?由于我是新手,因此将不胜感激任何建议。

标签: arraysswiftdictionary

解决方案


最简单的方法是使用reduce(into:)这样您就可以一步完成映射和分组

let suggestionsDict = eventRecords.reduce(into: [:]) {
    $0[$1.evType, default: []].append($1.evMainTxt)
}

推荐阅读