簡體   English   中英

Map的Scala訪問順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM