Generic Structure

ArraySlice

A slice of an Array, ContiguousArray, or ArraySlice instance. あるArrayContiguousArray、またはArraySliceインスタンスの断片。

Declaration 宣言

@frozen struct ArraySlice<Element>

Overview 概要

The ArraySlice type makes it fast and efficient for you to perform operations on sections of a larger array. Instead of copying over the elements of a slice to new storage, an ArraySlice instance presents a view onto the storage of a larger array. And because ArraySlice presents the same interface as Array, you can generally perform the same operations on a slice as you could on the original array. ArraySlice型は、ある大きな配列の各部分上で演算を実行することをあなたの代わりにより速くより効率的にします。ある断片部分(スライス)の要素をすっかり新しいストレージにコピーする代わりに、ArraySliceインスタンスはある大きな配列に関するある見方(ビュー)を提示します。そしてArraySliceArrayと同じインターフェイスを提供するので、あなたは一般的にあなたが元の配列上でできるのと同じ操作をスライス上で実行できます。

For more information about using arrays, see Array and ContiguousArray, with which ArraySlice shares most properties and methods. 配列の使用についてのさらなる情報として、ArrayContiguousArrayを見てください、それらとArraySliceはほとんどのプロパティとメソッドを共有します。

Slices Are Views onto Arrays スライスは配列に関する見方です

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


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

You want to compare the absences in the first half of the session with those in the second half. To do so, start by creating two slices of the absences array. あなたは、前学期の欠席者を後半のそれと比較したいと思います。それをするには、absences配列の2つのスライスを作成することで始めます。


let midpoint = absences.count / 2


let firstHalf = absences[..<midpoint]
let secondHalf = absences[midpoint...]

Neither the firstHalf nor secondHalf slices allocate any new storage of their own. Instead, each presents a view onto the storage of the absences array. firstHalfおよびsecondHalfスライスのどちらも、なんらそれら独自の新規ストレージを割り当てません。代わりに、absences配列のストレージ上でのひとつのビューをそれぞれが提示します。

You can call any method on the slices that you might have called on the absences array. To learn which half had more absences, use the reduce(_:_:) method to calculate each sum. あなたはどんなメソッドでもそれらスライス上で呼び出すことができます、それはあなたがabsences配列上で呼び出すであろうものです。前半後半のどちらがより多くの欠席者がいるか突き止めるには、reduce(_:_:)メソッドを使ってそれぞれ総計を計算します。


let firstHalfSum = firstHalf.reduce(0, +)
let secondHalfSum = secondHalf.reduce(0, +)


if firstHalfSum > secondHalfSum {
    print("More absences in the first half.")
} else {
    print("More absences in the second half.")
}
// Prints "More absences in the first half."

Slices Maintain Indices スライスはインデックスを維持します

Unlike Array and ContiguousArray, the starting index for an ArraySlice instance isn’t always zero. Slices maintain the same indices of the larger array for the same elements, so the starting index of a slice depends on how it was created, letting you perform index-based operations on either a full array or a slice. ArrayおよびContiguousArrayとは違い、ArraySliceインスタンスのインデックスの始まりは必ずしもゼロではありません。スライスはより大きな配列と同じインデックスを同じ要素に対して維持します、そのためスライスの開始インデックスはそれがどう作成されたかによって決まり、あなたにインデックスに基づく演算を完全な配列またはスライスのどちらでも実行させます。

Sharing indices between collections and their subsequences is an important part of the design of Swift’s collection algorithms. Suppose you are tasked with finding the first two days with absences in the session. To find the indices of the two days in question, follow these steps: コレクションとそれらの下位シーケンスとの間のインデックスの共有は、Swiftのコレクションアルゴリズム設計の重要な部分のひとつです。あなたがこの学期において欠席者のある最初の2つの日付を見つける任務を負うと考えてください。当該の2つの日付のインデックスを見つけるには、これらの手順を踏んでください:

  1. Call firstIndex(where:) to find the index of the first element in the absences array that is greater than zero. firstIndex(where:)を呼んでabsences配列の中の、ゼロより大きい最初の要素がもつインデックスを手に入れてください。

  2. Create a slice of the absences array starting after the index found in step 1. absences配列のスライスを、手順1で見つけたインデックスの後から開始して作成します。

  3. Call firstIndex(where:) again, this time on the slice created in step 2. Where in some languages you might pass a starting index into an indexOf method to find the second day, in Swift you perform the same operation on a slice of the original array. firstIndex(where:)もう一度呼び出します、今回は手順にで作成したスライス上で。何らかの言語ではあなたはある開始インデックスをindexOfメソッドに渡して2つ目の日付を見つけるかもしれないところで、Swiftではあなたは同じ演算をオリジナル配列のスライス上で実行します。

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

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


if let i = absences.firstIndex(where: { $0 > 0 }) {                 // 1
    let absencesAfterFirst = absences[(i + 1)...]                   // 2
    if let j = absencesAfterFirst.firstIndex(where: { $0 > 0 }) {   // 3
        print("The first day with absences had \(absences[i]).")    // 4
        print("The second day with absences had \(absences[j]).")
    }
}
// Prints "The first day with absences had 2."
// Prints "The second day with absences had 4."

In particular, note that j, the index of the second day with absences, was found in a slice of the original array and then used to access a value in the original absences array itself. 特に、欠席者のいる第2の日付のインデックス、jが、オリジナル配列のひとつのスライス上で捜されて、それから値のアクセスのためにオリジナルのabsences配列自身において使われる点に注意してください。

Topics 話題

Type Aliases 型エイリアス

Initializers イニシャライザ

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

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

Subscripts 添え字

Operator Functions 演算子関数

Relationships 関係

Conforms To 次に準拠

See Also 参照

Related Array Types 関連した配列型