2016-11-30 8 views
0

Ich habe gespeichert mehr Listen wie folgt:Berechnungen in einer Karte Liste

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

Und bisher habe ich die Möglichkeit, diese in eine TXT-Datei einfügen und sie wieder herauslesen. Ich bin mir jedoch nicht sicher, wie man eine Berechnung durchführt, so dass sie den ersten Wert mal die Sekunde anzeigt. Das ist, was ich will:

Data1 -> 200 
Data2 -> 1500 

Ich dachte, ich konnte vielleicht meinen Code unten (ausgeschnitten irrelevant Code) mapdata2 gespeichert als Map(String, List[Int]) ändern:

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):_*) 
    } 

Ich bin nicht sicher, wie um dieses Problem zu nähern, habe ich versucht:

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

dieses denken den ersten Wert von dem anderen Wert haben kann, multipliziert aber es funktioniert nicht. Ich muss besser verstehen, wie das funktioniert. Ich verstehe es nicht, also probiere ich ein paar Methoden aus, bis ich finde, was funktioniert. Ich suche nicht jemanden, der die Arbeit für mich erledigt, hilft mir einfach zu verstehen. Dank

Antwort

0

Wenn Sie versuchen, in die Werte abzubilden über Ihre Map Sie so etwas tun könnte:

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) 

Oder wenn Sie List s in der Karte wollen, würden Sie so etwas tun:

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)