2017-08-10 54 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 
[在其他數組值的順序排序陣列(的
相關問題