Scala -计算两个列表之间的最大平均值



我的Scala之旅刚刚开始。我试图找到并比较给定数据集类型Map(String, List[Int])的平均值,为用户选择的两个随机行,以返回两者之间更大的平均值。我可以计算每一行的平均值,但我找不到比较两行平均值的方法。

我已经尝试了不同的方法,但我只得到错误消息。然而,程序计算每行

的平均值。
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, 6

这就是程序如何计算一行的平均值

//Function to find the average
def average(list: List[Int]): Double = list.sum.toDouble / list.size
def averageStockLevel1(stock1: String, stock2: String): (String, Int) = {
val ave1 =  mapdata.get(stock1).map(average(_).toInt).getOrElse(0)
val ave2 =  mapdata.get(stock2).map(average(_).toInt).getOrElse(0)
if (ave1>ave2){
(stock1,ave1)
}else{
(stock2,ave2)
}
}
下面是我在菜单 中调用函数的方式
def handleFour(): Boolean = {
menuDoubleDataStock(averageStockLevel1)
true
}

//Pull two rows from the dataset
def menuShowDoubleDataStock(f: (String) => (String, Int), g:(String) => (String, Int)) = {
print("Please insert the Stock > ")
val data = f(readLine)
println(s"${data._1}: ${data._2}")
print("Please insert the Stock > ")
val data1 = g(readLine)
println(s"${data1._1}: ${data1._2}")
}

错误消息

未指定值参数:g: String =>(String、Int)

错误信息"未指定值参数:g: String =>(String、Int)";告诉你以下内容:

您的menuShowDoubleDataStock期望两个参数(fg),但是在您调用它的地方(从handleFour()),您只传递一个值(averageStockLevel1) -该值被接受为f,因此编译器抱怨没有为g传递值。

除了编译器当前抱怨的特定错误之外,还有第二个问题(目前似乎被上面的问题所掩盖):f的类型被定义为String => (String, Int)(一个接受一个String参数的函数),但是您传递的值(averageStockLevel1)具有类型(String, String) => (String, Int)(一个接受两个String参数的函数)。

我不能100%确定我是否理解你的目标是什么,但我认为解决方案可能是改变menuShowDoubleDataStock的签名,以便它只需要(String, String) => (String, Int)类型的一个参数:

// make the user enter two stock-names and pass them into resultCalculator to
// get the result (and then print it)
def menuShowDoubleDataStock(resultCalculator: (String, String) => (String, Int)) = {
print("Please insert the Stock > ")
val stockName1 = readLine
print("Please insert the Stock > ")
val stockName2 = readLine
val result = resultCalculator(stockName1, stockName2)
println(s"${result._1}: ${result._2}")
}

那么调用menuDoubleDataStock(averageStockLevel1)应该可以工作。

相关内容

  • 没有找到相关文章

最新更新