がありIndexedSeq[Map[String, String]]
、キーが「テキスト」である値を抽出し、それを に入れたいと思いますval text:IndexedSeq[String]
。次の記事を書きましたが、うまくいきません。
val text:IndexedSeq[String] = _
for(j <- 0 to indSeq.length-1){
text(j) = indSeq(j).get("text")
}
ではなく をindSeq(j).get("text")
返すため、コンパイラ エラーが発生している可能性があります。Option[String]
String
"text"
シーケンス内のキーのすべての値を取得するだけの場合は、次を使用します。
val text = indSeq flatMap (_ get "text")
両方のシーケンスのインデックスが一致することが重要な場合は、キー"text"
が存在しない場合に備えてデフォルト値を代用する必要があります。
val text = indSeq map (_.getOrElse("text", "default"))
"text"
最良のアプローチは、要素を持たないマップを取り除くためのガード付きの for-comprehension だと思います:
val result = for {
i <- 0 until indexSeq.length
map = indexSeq(i)
if map isDefinedAt ("text")
} yield { (i, map("text")) }
val seq = result.toIndexedSeq
そうすれば、マップで元のインデックスを保持できます。またvar
、常に特典である値を保持することを回避します
もともと for-comprehension を使おうとしていたので、次のようにすることにも興味があるかもしれません:
val text = (for { m <- indSeq } yield m get "text") flatten
編集
または、デフォルト値が必要な場合は、次のようにします。
val text = for { m <- indSeq } yield m getOrElse("text", "default")