2017-05-09 133 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]