2016-05-23 48 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) 

*这是通用的,因此将与任何类型的工作,让你提供条件