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

由于您最初尝试使用 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 回答
0

我认为最好的方法是与警卫一起理解以摆脱没有"text"元素的地图:

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 回答