2013-12-14 52 views
2

下面是一個香草斯卡拉地圖:斯卡拉:如何解構基本映射條目

scala> val m = Map('a'-> '1', 'b' -> 2) 
m: scala.collection.immutable.Map[Char,AnyVal] = Map(a -> 1, b -> 2) 

地圖iterator()方法返回一個代表(鍵,值)元組。因此,如果我們想看到地圖的值,我們可以這樣做:

scala> m.map(a => a._2) 
res0: scala.collection.immutable.Iterable[AnyVal] = List(1, 2) 

但是,我們如何解構地圖條目?以下不工作:

scala> m.map((a,b) => b) 
<console>:10: error: wrong number of parameters; expected = 1 
       m.map((a,b) => b) 
        ^

回答

5

你應該使用模式匹配:

m.map{ case (a, b) => b} 

映射條目只是一個Tuple2

+0

烏爾正確的軌道上,但有一個語法錯誤:控制檯>:1:錯誤:單純表達 – javadba

+1

的非法啓動需要不同的括號。 'm.map {case(a,b)=> b}' – Kigyo

+0

@Kigyo:錯過了,謝謝,修正。 – senia

3

萬一你不想寫case {...}語法:可能

scala> import Function.{ tupled => $ } 
import Function.{tupled=>$} 

scala> Map(1 -> "a") map $((a,b) => b) 
res1: scala.collection.immutable.Iterable[String] = List(a) 

scala> Map(1 -> "a") map $((a,b) => a -> s"$b!") 
res2: scala.collection.immutable.Map[Int,String] = Map(1 -> a!) 
+0

thx爲Function._ info – javadba