0

があり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")
}
4

3 に答える 3

1

ではなく をindSeq(j).get("text")返すため、コンパイラ エラーが発生している可能性があります。Option[String]String

"text"シーケンス内のキーのすべての値を取得するだけの場合は、次を使用します。

val text = indSeq flatMap (_ get "text")

両方のシーケンスのインデックスが一致することが重要な場合は、キー"text"が存在しない場合に備えてデフォルト値を代用する必要があります。

val text = indSeq map (_.getOrElse("text", "default"))
于 2013-02-23T17:42:52.047 に答える
0

"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、常に特典である値を保持することを回避します

于 2013-02-23T18:03:29.963 に答える
0

もともと for-comprehension を使おうとしていたので、次のようにすることにも興味があるかもしれません:

val text = (for { m <- indSeq } yield m get "text") flatten

編集

または、デフォルト値が必要な場合は、次のようにします。

val text = for { m <- indSeq } yield m getOrElse("text", "default")
于 2013-02-23T17:57:38.587 に答える