文書   >   Swift   >   Swift 標準ライブラリ >     Collections   >   Supporting Types   >   Slice


汎用構造体


Slice


別のコレクションの要素の部分シーケンスへのビュー。





概観


スライスは、基本となるコレクションとビューの開始および終了インデックスを保管します。コレクションの要素を別の保管場所にコピーすることはありません。したがって、スライスの作成には O(1) の複雑さがあります。


スライスはインデックスを共有する


スライスのインデックスは、基本となるコレクションのインデックスと互換的に使用できます。スライスの要素は、スライスが作成されてからコレクションもスライスも変更されていない限り、スライスと基本となるコレクションの同じインデックスの下にあります。


たとえば、セッション中に各クラスからの欠席数を保持する配列があるとします。



var absences = [0, 2, 0, 4, 0, 3, 1, 0]



あなたは、セッションの後半に欠席の多い日を見つけることを任されています。問題の日のインデックスを見つけるには、以下の手順に従います。


  1. 後半の日を保持する absences (欠席) 配列のスライスを作成します。

  2. max(by:) メソッドを使用して、欠席が最も多い日のインデックスを決定します。

  3. 元の absences 配列に手順 2 で見つかったインデックスを使用して、結果を印刷します。

これらの手順の実装は次のとおりです。



let secondHalf = absences.suffix(absences.count / 2)
if let i = secondHalf.indices.max(by: { secondHalf[$0] < secondHalf[$1] }) {
    print("Highest second-half absences: \(absences[i])")
}
// Prints "Highest second-half absences: 3"



スライスはセマンティクス (意味) を継承する


スライスは、その基本となるコレクションの値または参照セマンティクスを継承します。つまり、Slice インスタンスが配列などの値セマンティクスを持つ可変コレクションにラップされた場合、元のコレクションを変更するとそのコレクションのコピーがトリガーされ、スライスの内部に格納された基本となるコレクションには影響しません。


たとえば、absences 配列の最後の要素を 0 から 2 に更新しても、secondHalf スライスは変更されません。



absences[7] = 2
print(absences)
// Prints "[0, 2, 0, 4, 0, 3, 1, 2]"
print(secondHalf)
// Prints "[0, 3, 1, 0]"



スライスは過渡的な計算にのみ使用してください。スライスは、基本となるコレクションの寿命が終了した後でも、それが提示する部分だけでなく、大きなコレクションの保管場所全体への参照を保持することができます。したがって、スライスの長期保管場所は、もはや他の方法ではアクセスできない要素の寿命を延ばす可能性があり、誤ってメモリリークのように見える可能性があります。


注意:

変更可能なコレクションで Slice インスタンスを使用するには、基本となるコレクションの subscript(_: Index) セッタがインデックスを無効化しないようにする必要があります。カスタムコレクション型のインデックスを無効にする変更が必要な場合は、Slice をその部分シーケンス型として使用しないでください。代わりに、インデックス無効化要件を考慮した独自の部分シーケンス型を定義します。


トピックス





型エイリアス





イニシャライザ





インスタンスプロパティ





インスタンスメソッド





サブスクリプト





演算子関数


関連





汎用の制約


Base : Collection





以下に準拠





目次
Xcode 10 の新機能

  • 言語:Swift
  • SDK
  • Xcode 7.0+
  • フレームワーク
  • Swift 標準ライブラリ
  • 概観
  • トピックス
  • 関連












  • トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)