如何合并多个数组而不降低编译器的速度?
添加这行代码导致我的编译时间从10秒到3分钟。
var resultsArray = hashTagParticipantCodes + prefixParticipantCodes + asterixParticipantCodes + attPrefixParticipantCodes + attURLParticipantCodes
将其更改为这会使编译时间恢复正常。
var resultsArray = hashTagParticipantCodes resultsArray += prefixParticipantCodes resultsArray += asterixParticipantCodes resultsArray += attPrefixParticipantCodes resultsArray += attURLParticipantCodes
为什么第一行导致我的编译时间如此激烈地减速,还有比我已经发布的5行解决scheme更好的合并这些数组的方法吗?
它总是+
。 每次人们抱怨爆炸性的编译时间,我都会问“你链接了吗?” 而且一直都是。 这是因为+
太重了。 这就是说,我认为这在Xcode 8中是非常好的,至less在我的快速实验中。
你可以通过join数组而不需要添加var
来显着地提高速度,而不是添加它们:
let resultsArray = [hashTagParticipantCodes, prefixParticipantCodes, asterixParticipantCodes, attPrefixParticipantCodes, attURLParticipantCodes] .joinWithSeparator([]).map{$0}
在最后的.map{$0}
是强制它回到一个数组(如果你需要的话,否则你可以使用懒惰FlattenCollection)。 你也可以这样做:
let resultsArray = Array( [hashTagParticipantCodes, prefixParticipantCodes, asterixParticipantCodes, attPrefixParticipantCodes, attURLParticipantCodes] .joinWithSeparator([]))
但检查Xcode 8; 我相信这是至less部分固定的(但使用.joined()
仍然快得多,即使在Swift 3)。