2
說我有和數組[4,1,8,5]和另一個數組,對應於第一個數組中的每個對象,說[「四」,「一」,「八」 「五」]。我怎樣才能按升序排序第一個數組,同時也將第二個數組中的相應對象移動到Swift中的相同索引?排序數組和對應的數組
說我有和數組[4,1,8,5]和另一個數組,對應於第一個數組中的每個對象,說[「四」,「一」,「八」 「五」]。我怎樣才能按升序排序第一個數組,同時也將第二個數組中的相應對象移動到Swift中的相同索引?排序數組和對應的數組
使用quick sort:
func quicksort_swift(inout a:[Int], inout b:[String], start:Int, end:Int) {
if (end - start < 2){
return
}
let p = a[start + (end - start)/2]
var l = start
var r = end - 1
while (l <= r){
if (a[l] < p){
l += 1
continue
}
if (a[r] > p){
r -= 1
continue
}
let t = a[l]
let t1 = b[l]
a[l] = a[r]
b[l] = b[r]
a[r] = t
b[r] = t1
l += 1
r -= 1
}
quicksort_swift(&a, b: &b, start: start, end: r + 1)
quicksort_swift(&a, b: &b, start: r + 1, end: end)
}
雖然,通過@NSNoob提供的字典解決方案,應該是更快,更優雅。
不聽起來像是最好的做法,但是這將解決你的問題:
var numbers = [4,7,8,3]
var numbersString = ["Four","Seven","Eight","Three"]
func bubbleSort<T,Y>(inout numbers:[T],inout _ mirrorArray: [Y], _ comapre : (T,T)->(Bool)) ->() {
let numbersLength = numbers.count
for i in 0 ..< numbersLength {
for j in 1 ..< numbersLength-i {
if comapre(numbers[j-1],numbers[j]) {
swap(&numbers[j-1], &numbers[j])
swap(&mirrorArray[j-1], &mirrorArray[j])
}
}
}
}
bubbleSort(&numbers,&numbersString) { (a, b) -> (Bool) in
a<b
}
print(numbers,numbersString)
*這是通用的,因此將與任何類型的工作,讓你提供條件
你爲什麼要維護兩個數組首先如果他們有相互依賴性?爲什麼不製作一個像密鑰字典是4和價值是四? – NSNoob
我有一個由JSON字典組成的數組。我有另一個數組,它由從JSON字典中的值計算出來的整數組成。我想我可以進行計算,然後爲每個字典添加一個新的鍵並按這種方式排序。 – raginggoat