2016-11-30 56 views
0

我有存儲多個列表如下:計算在地圖列表

Data1 -> 2,100 
Data2 -> 5,300 

而且到目前爲止,我將這些媒體插入一個txt文件,並再次讀出來的能力。但是我不確定如何進行計算,以便第二次顯示第一個值。這就是我想要的:

Data1 -> 200 
Data2 -> 1500 

我想我可能已經能夠修改我下面的代碼(切出不相關的代碼)mapdata2存儲爲Map(String, List[Int])

val mapdata2 = readFile("newDataFile.txt") 

    //11 view newly created stocks 
    def handleEleven(): Boolean = { 
    mnuShowPoints(currentStockFor2) 
    true 
    } 
    def mnuShowPoints(stock:() => Map[String,List[Int]]) = { 
    stock() foreach {case (x,y) => println(s"$x: $y")} 
    } 
    // sort map by value in descending order - 
    def currentStockFor2():Map[String,List[Int]] = { 
    ListMap(mapdata2.toSeq.sortWith(_._1 < _._1):_*) 
    } 

我不知道怎麼樣要解決這個問題,我曾嘗試:

ListMap(mapdata2.map(x=>x*x) 

想這可能是乘以另一個值的第一個值,但事實並非如此。我需要更好地理解這是如何工作的。我不明白該怎麼做,所以我嘗試了幾種方法,直到找到可行的方法。我不是在找人爲我做這些工作,只是幫助我理解。由於

回答

0

如果你想在值映射在你Map你可以做這樣的事情:

scala> val myMap = Map("Data1" -> (2,100), "Data2" -> (3,500)) 
myMap: scala.collection.immutable.Map[String,(Int, Int)] = Map(Data1 -> (2,100), Data2 -> (3,500)) 

scala> val newMap = myMap.mapValues(x => x._1 * x._2) 
newMap: scala.collection.immutable.Map[String,Int] = Map(Data1 -> 200, Data2 -> 1500) 

或者,如果你想List在你的地圖,你會做這樣的事情:

scala> val myMap = Map("Data1" -> List(2,100), "Data2" -> List(3,500, 10)) 
myMap: scala.collection.immutable.Map[String,List[Int]] = Map(Data1 -> List(2, 100), Data2 -> List(3, 500, 10)) 

scala> val newMap = myMap.mapValues(_.reduce(_*_)) 
newMap: scala.collection.immutable.Map[String,Int] = Map(Data1 -> 200, Data2 -> 15000)