2017-08-10 51 views
1

在斯威夫特,说我有两个数组:如何根据另一个阵列位置快速排序一个数组?

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

我想我aary1排序按数组2

我阵列1的那么最终的输出是://数组1 = [50,20 ,100,10,30, 40,90,70]

+1

可能的复制https://stackoverflow.com/questions/44017101/ sort-array-by-order-of-values-in-other-array)或[重新排列数组与Swift中的另一个数组相比](https://stackoverflow.com/questions/39273370/reorder-array-compared-to-另一个快速数组) –

回答

1

即使你的问题是相当措辞含糊,从你的例子来看,你真正想要的是两个阵列的结合,用的元素更小的阵列进入fi首先在这个数组的末尾以不变的顺序排列更大阵列的独特元素。

下面的代码实现的例子的结果:

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

它确实有效,因为它保留了两个数组的独特元素。如果没有一个数组是另一个数组的子集,那么问题没有具体说明排序应该是什么,所以在这种情况下它们只是连接在一起。 –

+0

为什么downvote,请解释。 –

+0

@LucaAngeletti这是一个对这个人的一般评论,他确实是这样做的,因此我没有给你加标签。 –

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 
[在其他数组值的顺序排序阵列(的
相关问题