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

編集 @Martin 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] 
関連する問題