for式の結果を貯めておき、コレクションにすることができます。
以下が構文です。
変数 = for <節> yield {本文}
for式の説明で使用したリストを使い、本文の実行結果をコレクションとして貯めこむプログラムを書きます。
以下リストです。
val aaa = List("aaa", "bbb", "ccc")
val bbb = List("aaa2", "bbb2", "ccc2", "ddd2", "eeee2")
val ccc = List("aaa3", "bbb3", "ccc3", "ddd3")
val list = List(aaa,bbb,ccc)
以下がyieldを使ったfor式です。
val values =
for (
str <- list
if (str.length == 5); // リストの要素が5個の物だけにフィルタリング
value <- str
) yield {
println("value = " + value) // 子リストの要素の値の表示
value.length() // 文章の最後の値がコレクションに貯まる
}
出力は以下になります。
value = aaa2
value = bbb2
value = ccc2
value = ddd2
value = eeee2
想定通り、保持している要素が5個のリストの要素値が出力されました。
for式の最終行で要素文字列の長さをコレクションに入れています。
貯まったコレクションの値をfor式で出力してみます。
for (length <- values) print("length = " + length + ", ")
length = 4, length = 4, length = 4, length = 4, length = 5,
想定通り、コレクションの要素の文字列の長さが出力されました。
文字列値を出力せず、値を貯めるだけなら以下の文法で同様のコレクションを生成できます。
val values =
for (
str <- list
if (str.length == 5); // リストの要素が5個の物だけにフィルタリング
value <- str
) yield value.length()
最終更新:2014年11月21日 13:21