2016-05-23 72 views
2

說我有和數組[4,1,8,5]和另一個數組,對應於第一個數組中的每個對象,說[「四」,「一」,「八」 「五」]。我怎樣才能按升序排序第一個數組,同時也將第二個數組中的相應對象移動到Swift中的相同索引?排序數組和對應的數組

+3

你爲什麼要維護兩個數組首先如果他們有相互依賴性?爲什麼不製作一個像密鑰字典是4和價值是四? – NSNoob

+0

我有一個由JSON字典組成的數組。我有另一個數組,它由從JSON字典中的值計算出來的整數組成。我想我可以進行計算,然後爲每個字典添加一個新的鍵並按這種方式排序。 – raginggoat

回答

0

使用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提供的字典解決方案,應該是更快,更優雅。

2

不聽起來像是最好的做法,但是這將解決你的問題:

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) 

*這是通用的,因此將與任何類型的工作,讓你提供條件