Swift数组排序优化:高效保留整数与字符串对应关系的方法
高效实现关联数组排序(Swift)
你当前的代码本质是手动实现了冒泡排序,这种算法的时间复杂度是O(n²),处理大型数组时自然会非常慢。更高效的思路是先把关联的时间戳和文本配对成一个集合,利用Swift内置的优化排序算法(Timsort,时间复杂度O(n log n))完成排序,再拆分回原数组。
方案一:使用元组快速实现
这是最简洁的方式,适合简单场景:
// 1. 将两个关联数组合并为元组数组 let pairedData = zip(createTimerData.speechTimeStamps, createTimerData.speechText).map { ($0, $1) } // 2. 按时间戳降序排序(如果需要升序,把>改成<即可) let sortedPairedData = pairedData.sorted { $0.0 > $1.0 } // 3. 拆分回原数组 createTimerData.speechTimeStamps = sortedPairedData.map { $0.0 } createTimerData.speechText = sortedPairedData.map { $0.1 }
方案二:使用自定义结构体(可读性更强)
如果你的业务逻辑后续可能扩展,用结构体来封装关联数据会让代码更清晰、更易维护:
// 定义结构体封装时间戳和对应文本 struct SpeechContent { let timeStamp: Int let text: String } // 转换为结构体数组 var speechEntries = zip(createTimerData.speechTimeStamps, createTimerData.speechText) .map { SpeechContent(timeStamp: $0, text: $1) } // 按时间戳降序排序 speechEntries.sort { $0.timeStamp > $1.timeStamp } // 拆分回原数组 createTimerData.speechTimeStamps = speechEntries.map { $0.timeStamp } createTimerData.speechText = speechEntries.map { $0.text }
为什么这个方法更高效?
Swift的sort/sorted方法采用的是Timsort算法,这是一种经过工业级优化的混合排序算法,平均和最坏时间复杂度都是O(n log n)。相比你手动实现的冒泡排序,在处理大型数组时性能提升会非常显著——比如当数组有1000个元素时,O(n²)需要百万级操作,而O(n log n)只需要约10000次操作,差距会随着数组规模的扩大越来越明显。
内容的提问来源于stack exchange,提问作者D-A UK
相关产品推荐
相关产品推荐

