文書   >   Swift 標準ライブラリ >     Collections   >   Sequence and Collection   >   Sequence
プロトコル
Sequence
その要素への反復された連続アクセスを提供する型。
概観
シーケンス (sequence) とは、一度に 1 つずつ進めることができる値のリストの事です。シーケンスの要素を反復する最も一般的な方法は、for-in ループを使用することです。
let oneTwoThree = 1...3
for number in oneTwoThree {
print(number)
}
// Prints "1"
// Prints "2"
// Prints "3"
一見簡単ですが、この機能を使用すると、任意のシーケンスで実行できる多くの操作にアクセスできます。たとえば、シーケンスに特定の値が含まれているかどうかを確認するには、一致するものが見つかるまで、またはシーケンスの最後に達するまで、各値を順次テストできます。この例では、特定の昆虫が配列内にあるかどうかを調べます。
let bugs = ["Aphid", "Bumblebee", "Cicada", "Damselfly", "Earwig"]
var hasMosquito = false
for bug in bugs {
if bug == "Mosquito" {
hasMosquito = true
break
}
}
print("'bugs' has a mosquito: \(hasMosquito)")
// Prints "'bugs' has a mosquito: false"
Sequence プロトコルは、シーケンスの値への順次アクセスに依存する多くの一般的な操作のデフォルトの実装を提供します。もっとはっきりと、簡潔なコードにすると、上記の例では、配列の contains(_:) メソッドを使用することができ、これは、すべてのシーケンスが Sequence から継承され、手動で反復される事に代わるものです。
if bugs.contains("Mosquito") {
print("Break out the bug spray.")
} else {
print("Whew, no mosquitos!")
}
// Prints "Whew, no mosquitos!"
反復されたアクセス
Sequence プロトコルは、反復処理によって破壊的に消費されるかどうかに関して、準拠型には要件はありません。結果として、シーケンス上の複数の for-in ループが初めから反復を再開するか、再起動すると仮定しないでください。
for element in sequence {
if ... some condition { break }
}
for element in sequence {
// No defined behavior
}
この場合、シーケンスが消耗して反復を再開するか、シーケンスがコレクションであり、最初の要素から反復を再開するかは想定できません。コレクションではない、準拠するシーケンスは、2 番目の for-in ループで要素の任意のシーケンスを生成することができます。
作成した型が非破壊的な反復をサポートしていることを確認するには、Collection プロトコルへの準拠を追加して下さい。
Sequence プロトコルへの準拠
独自のカスタム型を Sequence に準拠させることで、for-in ループや contains メソッドなどの多くの便利な操作が可能になります。独自のカスタム型に Sequence の準拠性を追加するには、反復を返す makeIterator( ) メソッドを追加して下さい。
また、あなたの型が独自の反復として動作できる場合は、IteratorProtocol プロトコルの要件を実装し、Sequence と IteratorProtocol の両方に準拠を宣言するだけで十分です。
ここでは、独自の反復として機能する Countdown シーケンスの定義を示します。makeIterator( ) メソッドは、デフォルトの実装として提供されています。
struct Countdown: Sequence, IteratorProtocol {
var count: Int
mutating func next() -> Int? {
if count == 0 {
return nil
} else {
defer { count -= 1 }
return count
}
}
}
let threeToGo = Countdown(count: 3)
for i in threeToGo {
print(i)
}
// Prints "3"
// Prints "2"
// Prints "1"
期待されるパフォーマンス
シーケンスは O(1) に反復を提供する必要があります。Sequence プロトコルは要素アクセスに関する他の要件がないため、シーケンスを横断するルーチンは、特に明記されていない限り、O(n) とみなされます。
トピックス
繰り返しの作成
このシーケンスの要素の繰り返し因子を返します。
必須。デフォルトの実装が提供されます。
シーケンスの反復インタフェースを提供し、その反復状態をカプセル化する型。
必須。
シーケンスの要素を表す型。
必須。
要素の検索
シーケンスが指定された要素を含んでいるかどうかを示すブール値を返します。
func contains(where: (Self.Element) -> Bool)
シーケンスが、指定された述語を満たす要素を含んでいるかどうかを示すブール値を返します。
func first(where: (Self.Element) -> Bool)
指定された述語を満たすシーケンスの最初の要素を返します。
シーケンスの最小要素を返します。
func min(by: (Self.Element, Self.Element) -> Bool)
指定された述語を要素間の比較として使用して、シーケンス内の最小要素を返します。
シーケンス内の最大要素を返します。
func max(by: (Self.Element, Self.Element) -> Bool)
指定された述語を要素間の比較として使用して、シーケンス内の最大要素を返します。
要素の選択
func filter((Self.Element) -> Bool)
指定された predicate (述語) を満たすシーケンスの要素を順番に含む配列を返します。
必須。デフォルトの実装が提供されます。
シーケンスの最初の要素を含む、指定された最大長までの部分シーケンスを返します。
必須。 デフォルトの実装が供給されます。
func prefix(while: (Self.Element) -> Bool)
指定された predicate (述語) を満たす最初の、連続する要素を含む部分シーケンスを返します。
必須。 デフォルトの実装が供給されます。
シーケンスの最後の要素を含む、指定された最大長までの部分シーケンスを返します。
必須。 デフォルトの実装が供給されます。
シーケンスの要素の一部の部分シーケンスを表す型。
必須。
要素の除外
シーケンスの最初の要素を除くすべての要素を含む部分シーケンスを返します。
指定された数の最初の要素を除くすべてを含む部分シーケンスを返します。
必須。 デフォルトの実装が供給されます。
シーケンスの最後の要素を除くすべての要素を含む部分シーケンスを返します。
指定された数の最後の要素を除くすべてを含む部分シーケンスを返します。
必須。 デフォルトの実装が供給されます。
func drop(while: (Self.Element) -> Bool)
predicate (述語) が true を返し、残りの要素を返す間に、要素をスキップして部分シーケンスを返します。
必須。 デフォルトの実装が供給されます。
シーケンスの変換
func map<T>((Self.Element) -> T)
指定されたクロージャをシーケンスの要素にマッピングした結果を含む配列を返します。
必須。 デフォルトの実装が供給されます。
このシーケンスの各要素で、指定された変換を呼び出した nil でない結果を含む配列を返します。
  廃止  
func flatMap<SegmentOfResult>((Self.Element) -> SegmentOfResult)
このシーケンスの各要素で、指定された変換を呼び出した連結結果を含む配列を返します。
func reduce<Result>(Result, (Result, Self.Element) -> Result)
指定されたクロージャを使用してシーケンスの要素を結合した結果を返します。
var lazy: LazySequence<Self>
このシーケンスと同じ要素を含むシーケンスですが、map や filter などの一部の操作は遅延して実装されています。
シーケンスの要素を繰り返し処理
func forEach((Self.Element) -> Void)
for-in ループと同じ順序で、シーケンス内の各要素に指定されたクロージャを呼び出します。
必須。 デフォルトの実装が供給されます。
ペア (n、x) のシーケンスを返します。ここで n はゼロから始まる連続する整数を表し、x はシーケンスの要素を表します。
要素の並べ替え
シーケンスの要素を返します。並べ替えられた。
func sorted(by: (Self.Element, Self.Element) -> Bool)
指定された predicate を使用して要素間の比較として並べ替えられた、シーケンスの要素を返します。
このシーケンスの要素を逆の順番に含む配列を返します。
要素の分割と結合
func split(separator: Self.Element, maxSplits: Int, omittingEmptySubsequences: Bool)
指定された要素と等しい要素の周りで、シーケンスの可能な最長の部分シーケンスを、順番に返します。
指定された predicate (述語) を満たす要素を含まない、シーケンスの可能な最長の部分シーケンスを、順番に返します。
必須。 デフォルトの実装が供給されます。
連結されたこの一連のシーケンスの要素を返します。
func joined(separator: String)
シーケンスの要素を連結し、各要素間に指定されたセパレータを追加して新しい文字列を返します。
func joined<Separator>(separator: Separator)
各要素の間に指定されたセパレータを挿入して、この一連のシーケンスの連結された要素を返します。
シーケンスの比較
func elementsEqual<OtherSequence>(OtherSequence)
このシーケンスと別のシーケンスに同じ要素が同じ順序で含まれているかどうかを示すブール値を返します。
func starts<PossiblePrefix>(with: PossiblePrefix)
シーケンスの最初の要素が別のシーケンスの要素と同じかどうかを示すブール値を返します。
func starts<PossiblePrefix>(with: PossiblePrefix, by: (Self.Element, Self.Element) -> Bool)
指定された predivcate (述語) を等価テストとして使用して、シーケンスの最初の要素が別のシーケンスの要素と等しいかどうかを示すブール値を返します。
func lexicographicallyPrecedes<OtherSequence>(OtherSequence)
要素を比較するために小なり演算子 (<) を使用して、順序が辞書順で別のシーケンスの前にあるかどうかを示すブール値を返します。
指定された predicate (述語) を使用して要素を比較して、辞書の順序でシーケンスが別のシーケンスの前にあるかどうかを示すブール値を返します。
あまり使用されない機能
インスタンスプロパティ
シーケンス内の要素の数以下の値。非破壊的に計算されます。
必須。 デフォルトの実装が提供されます。
  Beta  
インスタンスメソッド
func compactMap<ElementOfResult>((Self.Element) -> ElementOfResult?)
このシーケンスの各要素で、指定された変換を呼び出した nil でない結果を含む配列を返します。
  Beta  
指定された predicate (述語) を等価テストとして使用して、このシーケンスと別のシーケンスが同じ順序で同等の要素を含んでいるかどうかを示すブール値を返します。
  Beta  
func fill(using: NSCompositingOperation)
func fill(using: NSCompositingOperation)
func fill(using: NSCompositingOperation)
func reduce<Result>(into: Result, (inout Result, Self.Element) -> ())
指定されたクロージャを使用してシーケンスの要素を結合した結果を返します。
関連
以下により継承
LazySequenceProtocol
以下により採用
- AnyIterator
- AnySequence
- AVCaptureSynchronizedData
Collection - Character.UnicodeScalarView
- CountablePartialRangeFrom
- Dictionary
- DispatchDataIterator
- EmptyIterator
- EnumeratedIterator
- EnumeratedSequence
- FileManager.Directory
Enumerator - FlattenIterator
- FlattenSequence
- IndexingIterator
- IteratorOverOne
- IteratorSequence
- JoinedSequence
- LazyCollection
- LazyDropWhileIterator
- LazyFilterCollection
- LazyFilterIterator
- LazyMapIterator
- LazyPrefixWhileIterator
- NSArray
- NSCountedSet
- NSDictionary
- NSEnumerator
- NSIndexSet
- NSMutableArray
- NSMutableDictionary
- NSMutableIndexSet
- NSMutableOrderedSet
- NSMutableSet
- NSOrderedSet
- NSSet
- ReversedCollection.Iterator
- SBElementArray
- Set
- StrideThrough
- StrideTo
- UnfoldSequence
- UnsafeBufferPointerIterator
- UnsafeMutableRawBufferPointer
- UnsafeMutableRawBufferPointer
.Iterator - UnsafeRawBufferPointer
- UnsafeRawBufferPointer
.Iterator - Zip2Sequence
以下も見よ
第一段階
その要素が複数回、非破壊的に横断され、インデックス付き添字によってアクセスされるシーケンス。
この文書には、開発中の API または技術に関する予備的な情報が含まれています。この情報は変更されることがあり、この文書に従って実装されたソフトウェアは、最終的なオペレーティングシステムソフトウェアでテストする必要があります。
Apple のベータ版ソフトウェアの使用方法の詳細 >