在斯威夫特,說我有兩個數組:如何根據另一個陣列位置快速排序一個數組?
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]
在斯威夫特,說我有兩個數組:如何根據另一個陣列位置快速排序一個數組?
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]
即使你的問題是相當措辭含糊,從你的例子來看,你真正想要的是兩個陣列的結合,用的元素更小的陣列進入fi首先在這個數組的末尾以不變的順序排列更大陣列的獨特元素。
下面的代碼實現的例子的結果:
let combined = array2 + array1.filter{array2.index(of: $0) == nil}
它確實有效,因爲它保留了兩個數組的獨特元素。如果沒有一個數組是另一個數組的子集,那麼問題沒有具體說明排序應該是什麼,所以在這種情況下它們只是連接在一起。 –
爲什麼downvote,請解釋。 –
@LucaAngeletti這是一個對這個人的一般評論,他確實是這樣做的,因此我沒有給你加標籤。 –
您還沒有確定要如何在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
[在其他數組值的順序排序陣列(的
可能的複製https://stackoverflow.com/questions/44017101/ sort-array-by-order-of-values-in-other-array)或[重新排列數組與Swift中的另一個數組相比](https://stackoverflow.com/questions/39273370/reorder-array-compared-to-另一個快速數組) –