輸出映射值我有以下代碼片段:問題的在階
val map = new LinkedHashMap[String,String]
map.put("City","Dallas")
println(map.get("City"))
此輸出Some(Dallas)
,而不是僅僅Dallas
。我的代碼有什麼問題?
謝謝
輸出映射值我有以下代碼片段:問題的在階
val map = new LinkedHashMap[String,String]
map.put("City","Dallas")
println(map.get("City"))
此輸出Some(Dallas)
,而不是僅僅Dallas
。我的代碼有什麼問題?
謝謝
這不是一個真正的問題。
雖然Java的地圖版本使用null
表明,一個關鍵沒有關聯的值,Scala的Map[A,B].get
回報Options[B]
,它可以是Some[B]
或None
,並沒有起到類似的作用Java的null
。顯示
REPL會話爲什麼這是有用的:
scala> map.get("State")
res6: Option[String] = None
scala> map.get("State").getOrElse("Texas")
res7: String = Texas
還是不推薦,但簡單get
:
scala> map.get("City").get
res8: String = Dallas
scala> map.get("State").get
java.util.NoSuchElementException: None.get
at scala.None$.get(Option.scala:262)
檢查Option文檔更多的好東西。
使用apply
方法,直接返回String
,如果關鍵是沒有找到拋出一個NoSuchElementException
:
scala> import scala.collection.mutable.LinkedHashMap
import scala.collection.mutable.LinkedHashMap
scala> val map = new LinkedHashMap[String,String]
map: scala.collection.mutable.LinkedHashMap[String,String] = Map()
scala> map.put("City","Dallas")
res2: Option[String] = None
scala> map("City")
res3: String = Dallas
有兩個方法可以處理Option
結果。
您可以模式相匹配他們:
scala> map.get("City") match {
| case Some(value) => println(value)
| case _ => println("found nothing")
| }
Dallas
或者有某個地方在編程出現在斯卡拉另一個整齊的做法。使用foreach
來處理結果。如果結果是Some
,那麼它將被使用。否則(如果它是None
),沒有任何反應:
scala> map.get("City").foreach(println)
Dallas
scala> map.get("Town").foreach(println)
感謝您的回覆。但是如何讓它只輸出值而不是Some(value)? – Tom 2011-06-17 12:06:12
@Tom我剛剛添加了一個如何使用它的例子。 – pedrofurla 2011-06-17 12:11:49