提问人:princess of persia 提问时间:2/24/2013 最后编辑:kiritsukuprincess of persia 更新时间:2/24/2013 访问量:279
Maps 的 Scala 访问顺序
Scala access sequence of Maps
问:
我有一个,我想提取键是“文本”的值,我想把它放在一个.我写了以下文章,但它不起作用: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")
}
答:
1赞
Ben James
2/24/2013
#1
您可能看到编译器错误,因为返回的是 ,而不是 .indSeq(j).get("text")
Option[String]
String
如果只想获取序列中键的所有值,请使用:"text"
val text = indSeq flatMap (_ get "text")
如果两个序列的索引对齐很重要,则需要替换默认值,以防键不存在:"text"
val text = indSeq map (_.getOrElse("text", "default"))
评论
0赞
princess of persia
2/24/2013
我正在使整个地图展平,而不仅仅是具有键“文本”的值。所以我正在寻找“文本”->“Lorem ipsum”,我想要一个“Lorem ipsum”序列。我相信每张地图都有一个关键的“文本”
0赞
Dave L.
2/24/2013
#2
由于您最初尝试使用理解,因此您可能也有兴趣以这种方式进行:
val text = (for { m <- indSeq } yield m get "text") flatten
编辑
或者,如果您想要默认值,您可以执行以下操作:
val text = for { m <- indSeq } yield m getOrElse("text", "default")
评论
0赞
Chirlo
2/24/2013
这将摆脱原始索引,我知道他有兴趣保留
0赞
Chirlo
2/24/2013
#3
我认为最好的方法是与守卫一起理解,以摆脱没有该元素的地图:"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
下一个:Java 数码规则生成器不工作
评论