スライスを配列に戻す
スライスを独立した配列として実体化します。
「スライスを配列に戻す」は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フィードバックを取得できます。ローカル設定は不要です。