我有一个整数数组,代表它们自己的字符串。
我知道有一些简单的方法可以对整数数组进行排序,但我需要这样做以使整数保持与字符串的对应关系。
这是我当前的代码:
var i = 0
var highestValueObjectInArray = 0
for object in createTimerData.speechTimeStamps {
if object > highestValueObjectInArray {
highestValueObjectInArray = object
}
}
while i + 1 < createTimerData.speechTimeStamps.count {
if createTimerData.speechTimeStamps[i] < createTimerData.speechTimeStamps[i + 1] {
let TS2 = createTimerData.speechTimeStamps[i + 1]
let TSS2 = createTimerData.speechText[i + 1]
createTimerData.speechTimeStamps.remove(at: i + 1)
createTimerData.speechTimeStamps.insert(TS2, at: i)
createTimerData.speechText.remove(at: i + 1)
createTimerData.speechText.insert(TSS2, at: i)
}
i += 1
if i+1 >= createTimerData.speechTimeStamps.count {
var lastItem = highestValueObjectInArray + 1
var inDescendingOrder = true
for object in createTimerData.speechTimeStamps {
if object < lastItem {} else { inDescendingOrder = false }
lastItem = object
}
if inDescendingOrder == false {
i = 0
}
}
}
它非常慢而且效率不高,所以当它对大型数组进行排序时会花费大量时间。有没有我忽略的方法,或者更有效的方法。
非常感谢任何帮助,谢谢。
最佳答案
通常,当您想要将单独的数组并排排序时,您真的应该考虑将它们合并为一个自定义类型的数组。例如,speechText
和 speechTimestamps
可能会合并到一个单一类型的数组中,Speech
:
struct Speech {
let text: String
let timestamp: Int
}
let speeches = [
Speech(text: "Baz", timestamp: 2),
Speech(text: "Bar", timestamp: 3),
Speech(text: "Foo", timestamp: 1)
]
然后你可以按照你认为合适的方式对这些进行排序:
let result = speeches.sorted { $0.timestamp < $1.timestamp }
显然,适当修改类型和名称,但希望这能说明这个想法。考虑一个类型的单个数组,它捕获正在排序的两个事物。
关于ios - 快速排序数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48110136/