[英]Scala access sequence of Maps
我有一個IndexedSeq[Map[String, String]]
,我想提取鍵為“ text”的值,並將其放在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"
很重要,那么您將要替換默認值,以防鍵"text"
不存在:
val text = indSeq map (_.getOrElse("text", "default"))
由於您最初嘗試使用理解功能,因此您可能也對這種方式感興趣:
val text = (for { m <- indSeq } yield m get "text") flatten
編輯
或者,如果您想使用默認值,則可以執行以下操作:
val text = for { m <- indSeq } yield m getOrElse("text", "default")
我認為最好的方法是對警衛的理解,以擺脫沒有"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
值,該值始終是特權
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.