Generic Structure

Slice

A view into a subsequence of elements of another collection. ある見方、別のコレクションのいくらかの要素からなる下位シーケンスです。

Declaration 宣言

@frozen struct Slice<Base> where Base : Collection

Overview 概要

A slice stores a base collection and the start and end indices of the view. It does not copy the elements from the collection into separate storage. Thus, creating a slice has O(1) complexity. あるスライス(切り取り)は、基盤コレクションおよびビューの始まりと終わりのインデックスを格納します。それは、要素をそのコレクションから別個のストレージへとコピーしません。したがって、ある切り取り(スライス)の作成はO(1)の計算量を持ちます。

Slices Share Indices スライスはインデックスを共有します

Indices of a slice can be used interchangeably with indices of the base collection. An element of a slice is located under the same index in the slice and in the base collection, as long as neither the collection nor the slice has been mutated since the slice was created. あるスライスのインデックスは、基盤コレクションのインデックスと交換可能に使われることができます。スライスの要素は、スライスにおいてそして基盤コレクションにおいて同じインデックス下に位置します、コレクションもスライスもスライスが作成されてから変化させられない限りは。

For example, suppose you have an array holding the number of absences from each class during a session. 例えば、あなたがある学期(2学期制)の各クラスの欠席者数が入った配列を持つと考えてください。


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

You’re tasked with finding the day with the most absences in the second half of the session. To find the index of the day in question, follow these steps: あなたはこの学期の後半において最も多く欠席者がいる日付を見つける任務を負います。質問の日付のインデックスを見つけるには、これらの手順に従ってください:

  1. Create a slice of the absences array that holds the second half of the days. 学期後半の日付を保持する、absences配列のスライスを作成してください。

  2. Use the max(by:) method to determine the index of the day with the most absences. max(by:)メソッドを使って最も欠席者の多い日付のインデックスを判定してください。

  3. Print the result using the index found in step 2 on the original absences array. 手順2で見つけたインデックスをオリジナルabsences配列上で使って結果を出力してください。

Here’s an implementation of those steps: ここにこれらの手順の実装があります:


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"

Slices Inherit Semantics スライスは意味論を継承します

A slice inherits the value or reference semantics of its base collection. That is, if a Slice instance is wrapped around a mutable collection that has value semantics, such as an array, mutating the original collection would trigger a copy of that collection, and not affect the base collection stored inside of the slice. スライスは、それの基盤コレクションのもつ値意味論もしくは参照意味論を継承します。すなわち、Sliceインスタンスが値意味論を持つ可変コレクション、例えば配列などの周りにラップされる場合、オリジナルのコレクションを変化させることはそのコレクションのコピーを誘発します、それでスライス内部に格納される基盤コレクションには影響を及ぼしません。

For example, if you update the last element of the absences array from 0 to 2, the secondHalf slice is unchanged. 例えば、あなたが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]"

Use slices only for transient computation. A slice may hold a reference to the entire storage of a larger collection, not just to the portion it presents, even after the base collection’s lifetime ends. Long-term storage of a slice may therefore prolong the lifetime of elements that are no longer otherwise accessible, which can erroneously appear to be memory leakage. スライスを一時的な計算のためだけに使ってください。あるスライスは、単にそれが提示する一部分に対してではなく、より大きなコレクションのストレージ全体への参照を保持します、元のコレクションの寿命が終わった後でさえも。あるスライスの長期ストレージは、もはやそれ以外ではアクセス可能ではない要素の寿命を延長し、それはメモリの漏洩であるように見ることができます。

Topics 話題

Type Aliases 型エイリアス

Initializers イニシャライザ

Instance Properties 様々なインスタンスプロパティ

Instance Methods インスタンスメソッド

Subscripts 添え字

Operator Functions 演算子関数

Relationships 関係

Conforms To 次に準拠

  • AccelerateBuffer
    Conforms when Base conforms to AccelerateBuffer. BaseAccelerateBufferに準拠する場合に準拠します。
  • AccelerateMutableBuffer
    Conforms when Base conforms to AccelerateMutableBuffer and MutableCollection. BaseAccelerateMutableBufferMutableCollectionに準拠する時に準拠します。
  • BidirectionalCollection
    Conforms when Base conforms to BidirectionalCollection. BaseBidirectionalCollectionに準拠する時に準拠します。
  • Collection
  • ContiguousBytes
    Conforms when Base conforms to ContiguousBytes. BaseContiguousBytesに準拠する時に準拠します。
  • DataProtocol
    Conforms when Base conforms to DataProtocol. BaseDataProtocolに準拠する時に準拠します。
  • LazySequenceProtocol
    Conforms when Base conforms to LazySequenceProtocol. BaseLazySequenceProtocolに準拠する時に準拠します。
  • MutableCollection
    Conforms when Base conforms to MutableCollection. BaseMutableCollectionに準拠する時に準拠します。
  • RangeReplaceableCollection
    Conforms when Base conforms to RangeReplaceableCollection. BaseRangeReplaceableCollectionに準拠する時に準拠します。