Arrays 尝试将值附加到字典中的数组

Arrays 尝试将值附加到字典中的数组,arrays,swift,dictionary,Arrays,Swift,Dictionary,我正在尝试向字典中定义的数组添加元素,如下所示: var eventsByQuarter = Dictionary<Int, [D_MatchEvents]>() matchEvents被正确加载为类型为D_matchEvents的排序数组,但是当我尝试循环通过数组,将每个事件附加到字典中正确的“四分之一”数组时,我在尝试引用成员“subscript”时遇到了一个不明确的错误 我看不出我怎么能做到这一点。任何帮助都将不胜感激。鉴于您词典的结构,问题在于: for event in

我正在尝试向字典中定义的数组添加元素,如下所示:

var eventsByQuarter = Dictionary<Int, [D_MatchEvents]>()
matchEvents
被正确加载为类型为
D_matchEvents
的排序数组,但是当我尝试循环通过数组,将每个事件附加到字典中正确的“四分之一”数组时,我在尝试引用成员“subscript”时遇到了一个不明确的错误


我看不出我怎么能做到这一点。任何帮助都将不胜感激。

鉴于您词典的结构,问题在于:

for event in matchEvents {
    eventsByQuarter[event.d_EventQuarter] = eventsByQuarter.append(event)
}
它应该是:

for event in matchEvents {
    eventsByQuarter[event.d_EventQuarter]?.append(event)
}
尽管您确实需要检查给定密钥是否存在现有数组,但我会这样做:

for event in matchEvents {
    //Create a variable that is either a mutable copy of the existing array, or a new, empty array of the correct type
    var thisQuarter = eventsByQuarter[event.d_eventQuarter] ?? [D_MatchEvents]()
    //Add the new item
    thisQuarter.append(event)
    //Replace the existing array with the appended copy, or add a new key-value pair (if it didn't already exist)
    eventsByQuarter[event.d_eventQuarter] = thisQuarter
}

虽然效率不高,但它的实现速度很快

谢谢。这让我更深入地研究它。我现在找到了解决办法。事实上,我需要做的是将键定义为它自己的变量,而不是直接引用数组的元素。所以代码现在看起来像这样

    for event in matchEvents {
        let qtr:Int = Int(event.d_EventQuarter)
        eventsByQuarter[qtr]?.append(event)
    }
我不知道为什么会这样,但它是有效的。使用SWIFT仍有待发现的众多谜团之一!关于您关于在追加之前检查词典项是否存在的其他评论,我完全同意其他情况,但是在这里,我知道总会有4个项,不多也不少,因此我们选择在开始时对它们进行初始化,然后无需进一步检查。我只是在循环数组设置字典之前这样做

       for index in 1...4 { eventsByQuarter[index] = [] }

d\u EventQuarter
是否属于
Int
类型?实际上它是Int16类型?由于核心数据目前不允许IntI am afk im,但我假设将其展开将修复错误。
       for index in 1...4 { eventsByQuarter[index] = [] }