Swift Academy · レッスン

スライスを配列に戻す

スライスを独立した配列として実体化します。

レッスン 3/413 ステップ

「スライスを配列に戻す」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

スライスは配列ではない

ArraySlice は Array とは異なる型です。多くの API は具体的な Array を必要とするため、変換が必要になることがよくあります。

let original = [1, 2, 3, 4, 5]
let slice = original[1..<4]
print(type(of: slice))

Array(slice)

スライスを Array(...) イニシャライザでラップすると、要素がコピーされ、0 基準のインデックスを持つ新しい独立した配列を作成できます。

let original = [10, 20, 30, 40, 50]
let slice = original[2..<5]
let array = Array(slice)
print(array)
print(type(of: array))

インデックスを 0 から振り直す

変換後の新しい配列は 0 からインデックスを振り直します。親のインデックスを保持していたスライスとは異なります。

let original = [1, 2, 3, 4, 5]
let slice = original[3..<5]
let copy = Array(slice)
print("slice start:", slice.startIndex)
print("array start:", copy.startIndex)

変換によってストレージがコピーされる

変換を行うとコピーが強制されます。新しい配列は親配列とストレージを共有しなくなるため、新しい配列を変更しても元の配列には影響しません。

let original = [1, 2, 3, 4]
var copy = Array(original[1..<3])
copy[0] = 999
print("original:", original)
print("copy:", copy)

関数から配列を返す

関数が配列の一部を返す場合は、スライスを変換して、呼び出し元が通常の Array を受け取れるようにしてください。

func firstThree(of nums: [Int]) -> [Int] {
    return Array(nums.prefix(3))
}
print(firstThree(of: [9, 8, 7, 6, 5]))

Array 型の引数に渡す

API の引数が [Int] 型の場合は、スライスを渡す前に変換する必要があります。

func total(_ values: [Int]) -> Int {
    return values.reduce(0, +)
}
let data = [1, 2, 3, 4, 5]
let result = total(Array(data[1..<4]))
print(result)

変換が不要な場合

関数が汎用的な Sequence または Collection を受け取る場合は、変換せずにスライスを直接渡せます。

func describe<S: Sequence>(_ s: S) where S.Element == Int {
    print(Array(s))
}
let arr = [2, 4, 6, 8]
describe(arr[1..<3])

メモリのトレードオフ

スライスはコピーを避け、親のストレージを保持します。巨大な配列の一部である小さなスライスを長時間保持する場合は、配列に変換して大きなバッファーを解放できるようにしてください。

let huge = Array(1...1000)
let keep = Array(huge[0..<3]) // small independent copy
print(keep)

Setへの変換

Set など、ほかのコレクションのイニシャライザにもスライスを渡せます。

let arr = [1, 2, 2, 3, 3, 3]
let uniqueTail = Set(arr[2..<6])
print(uniqueTail.sorted())

往復変換

スライスしてから変換し、再びスライスしても問題ありません。各変換は明示的で予測可能です。

let arr = [10, 20, 30, 40, 50]
let a = Array(arr[1..<4])
let b = Array(a[0..<2])
print(a)
print(b)

ベストプラクティス

計算中はスライスのまま扱い、結果を保存または返す境界でのみ Array に変換してください。

let arr = [3, 1, 4, 1, 5, 9, 2]
let top3 = Array(arr.sorted(by: >)[0..<3])
print(top3)

確認テスト

スライスの変換をテストしてください。

まとめ

Array(slice) を使用すると、ArraySlice を、0から始まるインデックスとコピーされたストレージを持つ独立した配列に変換できます。APIの境界で変換し、余分なコピーを避けるため、計算中はスライスのまま扱ってください。

let s = [1, 2, 3, 4, 5][2..<5]
let a = Array(s)
print(a, a.startIndex)
無料で開始

AI チューターと学ぶ Swift — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
122
レッスン
409

よくある質問

「スライスを配列に戻す」レッスンは無料ですか?

はい。「スライスを配列に戻す」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「スライスを配列に戻す」で何を学びますか?

スライスを独立した配列として実体化します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「スライスを配列に戻す」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 範囲によるスライスの作成
  2. ArraySliceのインデックスの仕組み
  3. スライスを配列に戻す
  4. prefix、suffix、dropFirst
← Swift Academyに戻る