associatedtype Elements
Sequence
that can contain the same elements as this one, possibly with a simpler type.
このものと同じ要素を、できる限りより簡単な型で、含むSequence
。
Availability
Technology
protocol LazySequenceProtocol
Lazy sequences can be used to avoid needless storage allocation and computation, because they use an underlying sequence for storage and compute their elements on demand. For example, doubled
in this code sample is a sequence containing the values 2
, 4
, and 6
.
遅延シーケンスは、不必要なストレージの割り当てと計算を防止するために使われることができます。例えば、このコード見本の中のdoubled
は、値2
、4
、そして6
を含んでいるあるシーケンスです。
Each time an element of the lazy sequence doubled
is accessed, the closure accesses and transforms an element of the underlying array.
この遅延シーケンスdoubled
の要素がアクセスされるたびごとに、クロージャはその基礎をなす配列の要素にアクセスおよび変換します。
Sequence operations that take closure arguments, such as map(_:)
and filter(_:)
, are normally eager: They use the closure immediately and return a new array. When you use the lazy
property, you give the standard library explicit permission to store the closure and the sequence in the result, and defer computation until it is needed.
クロージャ引数をとるシーケンス演算、たとえばmap(_:)
およびfilter(_:)
は、通常は先行です;それらはクロージャを直ちに使います、そして新しい配列を返します。あなたがlazy
プロパティを使う場合、あなたは標準ライブラリに明示的な権限を与えて、クロージャとシーケンスを結果に格納します、そして計算をそれが必要とされるまで延期します。
To add a new lazy sequence operation, extend this protocol with a method that returns a lazy wrapper that itself conforms to Lazy
. For example, an eager scan(_:
method is defined as follows:
新しい遅延シーケンス演算を加えるには、このプロトコルをあるメソッドで拡張してください、それはそれ自身Lazy
に準拠するある遅延ラッパーを返すものです。例えば、ある即時scan(_:
メソッドは以下のように定義されます:
You can build a sequence type that lazily computes the elements in the result of a scan: あなたは、ある走査の結果の中の要素それらを遅延に計算するシーケンス型を構築できます:
Finally, you can give all lazy sequences a lazy scan(_:
method:
最終的に、あなたは全ての遅延シーケンスをある遅延scan(_:
メソッドに与えることができます:
With this type and extension method, you can call .lazy
on any sequence to create a lazily computed scan. The resulting Lazy
is itself lazy, too, so further sequence operations also defer computation.
この型と拡張メソッドで、あなたは.lazy
をあらゆるシーケンス上で呼び出して、遅延に計算される走査を作成できます。結果のLazy
はそれ自体また遅延です、なのでその先のシーケンス演算もまた計算を延期します。
The explicit permission to implement operations lazily applies only in contexts where the sequence is statically known to conform to Lazy
. In the following example, because the extension applies only to Sequence
, side-effects such as the accumulation of result
are never unexpectedly dropped or deferred:
遅延に演算を実施するための明示的な許可は、そこにおいてシーケンスがLazy
に準拠することを静的に見分けられる文脈においてのみ適用されます。以下の例において、拡張はSequence
に対してのみ適用されることから、副作用それら、たとえばresult
の蓄積などは、決して不意に投下されたり延期されたりしません。
Don’t actually use map
for this purpose, however, because it creates and discards the resulting array. Instead, use reduce
for summing operations, or for
or a for
-in
loop for operations with side effects.
しかしながら、実際にmap
をこの目的のために使わないでください、なぜならそれは結果の配列を作成してそして放棄するからです。代わりに、reduce
を合計演算のために、またfor
やfor
-in
ループを副作用付き演算のために、使ってください。
associatedtype Elements
Sequence
that can contain the same elements as this one, possibly with a simpler type.
このものと同じ要素を、できる限りより簡単な型で、含むSequence
。
var elements: Self.Elements
var lazy: Self.Elements
Elements
conforms to LazySequenceProtocol
.
Elements
がLazySequenceProtocol
に準拠する時に利用可能です。
func compactMap <ElementOfResult>((Self.Elements.Element) -> ElementOfResult?) -> LazyMapSequence<LazyFilterSequence<LazyMapSequence<Self.Elements, ElementOfResult?>>, ElementOfResult>
nil
results of mapping the given transformation over this sequence.
与えられた変換をこのシーケンス全体にわたってマッピングする非nil
の結果を返します。
func drop(while: (Self.Elements.Element) -> Bool) -> LazyDropWhileSequence<Self.Elements>
predicate
.
predicate
を満足させる、あらゆる冒頭の要素を省くある遅延シーケンスを返します。
func filter((Self.Elements.Element) -> Bool) -> LazyFilterSequence<Self.Elements>
self
that satisfy isIncluded
.
self
の要素でisIncluded
を満足させるものを返します。
func flatMap <ElementOfResult>((Self.Elements.Element) -> ElementOfResult?) -> LazyMapSequence<LazyFilterSequence<LazyMapSequence<Self.Elements, ElementOfResult?>>, ElementOfResult>
nil
results of mapping the given transformation over this sequence.
与えられた変換をこのシーケンス全体にわたってマッピングする非nil
の結果を返します。
func flatMap <SegmentOfResult>((Self.Elements.Element) -> SegmentOfResult) -> LazySequence<FlattenSequence<LazyMapSequence<Self.Elements, SegmentOfResult>>>
func joined() -> LazySequence<FlattenSequence<Self.Elements>>
Element
conforms to Sequence
.
Element
がSequence
に準拠する時に利用可能です。
func map<U>((Self.Element) -> U) -> LazyMapSequence<Self.Elements, U>
LazyMapSequence
over this Sequence
. The elements of the result are computed lazily, each time they are read, by calling transform
function on a base element.
このSequence
を覆うLazyMapSequence
を返します。結果のそれぞれの要素は遅延に計算されます、毎回それらは、基盤となる要素上でtransform
関数を呼び出すことによって読み出されます。
func prefix(while: (Self.Elements.Element) -> Bool) -> LazyPrefixWhileSequence<Self.Elements>
predicate
.
predicate
を満足させる、冒頭の隣接要素からなるある遅延シーケンスを返します。
LazyDropWhileSequence
LazyFilterSequence
LazyMapSequence
LazyPrefixWhileSequence
LazySequence
ReversedCollection
Base
conforms to LazySequenceProtocol
.
Base
がLazySequenceProtocol
に準拠する時に準拠します。
Slice
Base
conforms to LazySequenceProtocol
.
Base
がLazySequenceProtocol
に準拠する時に準拠します。
protocol LazyCollectionProtocol
map
and filter
are implemented lazily.
あるコレクション、それにおいては通常は先行な演算、例えばmap
やfilter
は、遅延に実装されます。