我的Scala之旅刚刚开始。我试图找到并比较给定数据集的最大增加值--类型Map(String,List[Int])。程序应该计算List的最后7个值和每行的最后一个值之间的增加(或减少),然后打印整个Map的最大增加行。例如,给定以下数据集:
DATASET
SK1, 9, 7, 2, 0, 7, 3, 7, 9, 1, 2, 8, 1, 9, 6, 5, 3, 2, 2, 7, 2, 8, 5, 4, 5, 1, 6, 5, 2, 4, 1
SK2, 0, 7, 6, 3, 3, 3, 1, 6, 9, 2, 9, 7, 8, 7, 3, 6, 3, 5, 5, 2, 9, 7, 3, 4, 6, 3, 4, 3, 4, 1
SK3, 8, 7, 1, 8, 0, 5, 8, 3, 5, 9, 7, 5, 4, 7, 9, 8, 1, 4, 6, 5, 6, 6, 3, 6, 8, 8, 7, 4, 0, 7
程序应计算每一行的增量:
SK1 = 1 "last value" - 5 "7th last value" = - 4
SK2 = 1 "last value" - 4 "7th last value" = - 3
SK3 = 7 "last value" - 6 "7th last value" = 1
程序应打印SK 3 - 0,因为是最高增量。
程序可以计算每行的增量,但目前需要SK输入,方法如下:
第一次
然后在程序菜单中使用以下命令调用这两个方法:
第一个
我试着调用下面的方法来计算每行的上升,但似乎没有效果:
def menuShowStocks(f: () => Map[String, List[Int]]) = {
val highestIncrese = 0
f() foreach { case (x, y) => println(s"$x: $y") }
}
1条答案
按热度按时间snvhrwxg1#
常见的做法是:
我们开始吧:
一些注意事项:
toSeq
的Seq。在Map上进行Map是完全可能的,但有点复杂。最好将此留到以后学习。这将生成一个Seq[(String, List[Int])]
。map
,我们迭代Seq中的元组。这使用模式匹配来提取变量name
和ints
。->
操作符来构造一个新的包含两个元素的元组,这样我们就可以保留行的名称。maxBy
接受一个函数来获取一个值。表达式_._2
(等价于x => x._2
)是一个函数,它给出每个元组中的第二个值。下面可以打印出我们所发现的东西的名称: