我有多个列表存储如下:
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 :(得分: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)