我有一個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")
}
我有一個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")
}
你可能會看到一個編譯器錯誤,因爲indSeq(j).get("text")
返回Option[String]
,而不是String
。
如果你只是想獲得一個序列的關鍵"text"
所有的值,使用:
val text = indSeq flatMap (_ get "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")
這將擺脫原來的索引,我明白他有興趣保留 – Chirlo 2013-02-23 17:58:32
我認爲最好的辦法是用一個換理解與後衛擺脫了地圖,唐「T有"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
值,這總是一個振作
我得到整個地圖扁平化,而不僅僅是具有關鍵「文本」的值。所以我在尋找「文字」 - >「Lorem ipsum」,我想要一個「Lorem ipsum」序列。我相信每張地圖都有一個關鍵的「文字」 – 2013-02-23 19:39:55