如何根据swift中的另一个数组位置对一个数组进行排序?

时间:2017-08-10 14:42:16

标签: arrays swift sorting

在Swift中,我说有两个阵列:

var array1: [Int] = [100, 40, 10, 50, 30, 20, 90, 70]
var array2: [Int] = [50, 20, 100, 10, 30]

我想按照array2

对aary1进行排序
  

所以我的array1的最终输出将是:// array1 = [50,20,100,10,30,   40,90,70]

2 个答案:

答案 0 :(得分:1)

即使你的问题含糊不清,从你的例子来看,你真正想要的是两个数组的并集,首先是较小数组的元素,然后是更大数组的唯一元素。此数组末尾的订单不变。

以下代码实现了示例的结果:

let combined = array2 + array1.filter{array2.index(of: $0) == nil}

答案 1 :(得分:1)

您尚未定义希望如何对array1中的元素进行排序,而不是array2中的元素。此解决方案假定您希望按其数值对这些未找到的元素进行排序:

var array1 = [100, 40, 10, 50, 30, 20, 90, 70]
var array2 = [50, 20, 100, 10, 30]

array1.sort {
    let index0 = array2.index(of: $0)
    let index1 = array2.index(of: $1)

    switch (index0, index1) {
    case (nil, nil):
        return $0 < $1
    case (nil, _):
        return false
    case (_, nil):
        return true
    default:
        return index0! < index1!
    }
}

print(array1) // [50, 20, 100, 10, 30,    40, 70, 90]
              //                          ^ order not defined in array2