ios – 如何在不降低编译器速度的情况下合并多个阵列?

添加这行代码会导致编译时间从10秒增加到3分钟.

var resultsArray = hashTagParticipantCodes + prefixParticipantCodes + asterixParticipantCodes + attPrefixParticipantCodes + attURLParticipantCodes

将其更改为此会使编译时间恢复正常.

var resultsArray = hashTagParticipantCodes
resultsArray += prefixParticipantCodes
resultsArray += asterixParticipantCodes
resultsArray += attPrefixParticipantCodes
resultsArray += attURLParticipantCodes

为什么第一行导致我的编译时间如此急剧减慢并且有一种更优雅的方式来合并这些数组而不是我发布的5行解决方案?

最佳答案
总是如此 .每次人们抱怨爆炸性的编译时间,我都会问“你有链接吗?”它始终是肯定的.这是因为如此严重超载.也就是说,我认为这在Xcode 8中要好得多,至少在我的快速实验中是这样.

您可以通过加入数组而不是添加它来显着加快速度而不需要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;我相信这至少是部分修复的(但是使用.joined()仍然要快得多,即使在Swift 3中).

转载注明原文:ios – 如何在不降低编译器速度的情况下合并多个阵列? - 代码日志