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] = [] }