You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:21:09