如何合并多个数组而不降低编译器的速度?

添加这行代码导致我的编译时间从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)。