我正在使用Swift开发一个项目,使用了一个字典
。
这个字典的类型是[String : [Posting]]
。我有大约20万个不同的“术语”(键)要插入其中,对于每个术语,我有大约500到1000个对象要追加到列表中。我知道这是一种奇怪的做法,但我别无选择,必须处理所有这些元素。
问题在于,随着字典变得越来越大,速度非常慢。我尝试切换到NSMutableDictionary
,没有任何效果。
我的addTerm
函数在每次需要插入元素时被调用:
func addTerm(_ term: String, withId id: Int, atPosition position: Int) {
if self.map[term] == nil {
self.map[term] = [Posting]()
}
if self.map[term]!.last?.documentId == id {
self.map[term]!.last?.addPosition(position)
}
else {
self.map[term]!.append(Posting(withId: id, atPosition: position, forTerm: term))
}
}
编辑:我意识到导致所有这些延迟的不是字典,而是它包含的数组。当添加新元素时,数组重新分配得太多,而我所能做的最好的就是用ContiguousArray
替换它们。
O(1)
(常数时间)的性能。它不会变得“非常非常慢”。正如Palle在他的答案中建议的那样,您应该使用工具来对代码进行时间分析。 - Duncan C