シーケンスの作成
コレクションとジェネレーターから作成します
「シーケンスの作成」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
シーケンスの作成
Sequenceを作成する方法はいくつかあります。既存のコレクションから作成する方法、要素から作成する方法、生成関数を使う方法、ビルダーを使う方法です。このレッスンでは、それぞれを扱います。
asSequenceによるコレクションからの作成
最も一般的な方法は、既存のコレクションでasSequence()を呼び出し、遅延評価で処理することです。
fun main() {
val seq = listOf(1, 2, 3, 4).asSequence()
val result = seq.map { it * 2 }.toList()
println(result)
}sequenceOfによる要素からの作成
sequenceOfは、固定された値の集合から直接シーケンスを作成します。
fun main() {
val seq = sequenceOf("a", "b", "c")
seq.forEach { println(it) }
}generateSequenceによる無限シーケンス
generateSequenceは、シードと次の要素を計算する関数から、(場合によっては無限の)シーケンスを構築します。takeと組み合わせて、要素数を制限できます。
fun main() {
val powers = generateSequence(1) { it * 2 }
val first5 = powers.take(5).toList()
println(first5)
}generateSequenceの停止
次の要素を生成する関数がnullを返すと、シーケンスは終了します。これにより、条件が満たされるまで要素を生成できます。
fun main() {
val countdown = generateSequence(5) { if (it > 1) it - 1 else null }
println(countdown.toList())
}シードなしのgenerateSequence
次の値またはnullを返す単一のプロデューサーラムダ式を渡すこともできます。入力ストリームを遅延評価で読み取る場合に便利です。
fun main() {
var n = 0
val seq = generateSequence { if (n < 3) n++ else null }
println(seq.toList())
}sequenceビルダー
sequence { }ビルダーを使うと、yield(1つの値)とyieldAll(複数の値)によって、命令型のコードで要素を生成できます。
fun main() {
val seq = sequence {
yield(1)
yield(2)
yieldAll(listOf(3, 4))
}
println(seq.toList())
}遅延的なyield
ビルダーも遅延評価されます。yieldの間にあるコードは、要素が要求されたときにのみ実行されます。takeと組み合わせることで、無限に要素を生成する処理も安全に記述できます。
fun main() {
val naturals = sequence {
var i = 1
while (true) {
yield(i)
i++
}
}
println(naturals.take(4).toList())
}generateSequenceによるフィボナッチ数列
典型的な例として、Pairを状態として使い、フィボナッチ数を遅延評価で生成します。
fun main() {
val fib = generateSequence(Pair(0, 1)) { Pair(it.second, it.first + it.second) }
.map { it.first }
println(fib.take(8).toList())
}コレクションへの再変換
シーケンスが具体的なコレクションになるのは、toList()、toSet()、toMutableList()などの終端操作を呼び出したときです。
fun main() {
val set = sequenceOf(1, 2, 2, 3).toSet()
println(set)
}作成方法の選び方
既存のデータにはasSequence()、固定値にはsequenceOf、計算による系列にはgenerateSequence、独自の命令型生成にはsequence { }ビルダーを使います。
クイックチェック
generateSequenceはいつ停止するかをどのように判断しますか?
復習
asSequence()、sequenceOf、generateSequence(シードと次の要素を使い、nullで終了)、およびyield/yieldAllを使うsequence { }ビルダーでシーケンスを作成できます。次は、遅延操作によって中間リストを回避する方法を見ていきます。
よくある質問
「シーケンスの作成」レッスンは無料ですか?
はい。「シーケンスの作成」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「シーケンスの作成」で何を学びますか?
コレクションとジェネレーターから作成します ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「シーケンスの作成」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- シーケンスを使う理由
- シーケンスの作成
- 遅延操作
- シーケンスとコレクション