2017-05-09 127 views
-5

夥計們。 如何將數組從特定索引排序到特定索引,而不是全數組排序。我正在尋找很多,但沒有找到任何解決方案,所以請告訴我如何做到這一點。將數組從特定索引排序到特定索引

+0

這將是更好,如果你也能分享你的代碼,以顯示你已經嘗試過什麼,或者知道你在哪裏出了錯。 –

+0

你到目前爲止嘗試過什麼?想到一個解決方案,但可能不是最有效的,它是根據您的索引將陣列首先分割成更小的陣列。然後對你想要排序的部分進行排序並再次組合數組。 –

回答

3

最簡單的方法是從數組中排序它的特定範圍,然後用排序後的數組替換該特定範圍。

防爆

var array = [1,50,42,15,3,25,63,7,26,8,10,36,78,12] 
let sliceSortedArray = array[5...10].sorted() 
array.removeSubrange(5...10) 
array.insert(contentsOf: sliceSortedArray, at: 5) 
print(sliceSortedArray) // [7, 8, 10, 25, 26, 63] 
print(array) // [1, 50, 42, 15, 3, 7, 8, 10, 25, 26, 63, 36, 78, 12] 

編輯作爲@馬丁 - [R建議你也可以使用replaceSubrange(_:with:)

array.replaceSubrange(5...10, with: array[5...10].sorted()) 
+3

稍微簡單一點:'array.replaceSubrange(5 ... 10,with:array [5 ... 10] .sorted()) ' –

+0

@MartinR你還可以使用'array [range] = otherarray'嗎?這將進一步簡化它。 –

+0

@MartinR感謝您的好建議,使用'replaceSubrange'編輯答案。 –

0

您可以使用filtersort的組合,它將返回一個帶有排序元素的新數組。東西沿線

let newArray = originalArray.filter { 
    //This is where you filter based on indexes 
}.sort { 
    //This is where you sort your filtered array 
} 
5

您可以在陣列的切片直接調用sort()

var array = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 
array[2...7].sort() 

print(array) 
// [9, 8, 2, 3, 4, 5, 6, 7, 1, 0]