scala - 为什么Scala返回一个';' 预期但“,”发现错误?
问题描述
我目前正在尝试使用有效的合并排序算法在 Scala 中编写反转计数算法。
合并排序按预期运行,但是当我尝试将计数添加为参数之一时,我得到了错误:
Error:(14, 29) ';' expected but ',' found.
case (_, Nil) => left, count
^
这是程序:
object MergeSort {
def mergeSort(inputList: List[Int]): List[Int] = {
if (inputList.length <= 1) inputList
else {
val (left, right) = inputList.splitAt(inputList.size / 2)
merge(mergeSort(left), mergeSort(right), 0)
}
}
def merge(left: List[Int], right: List[Int], count: Int): List[Int] =
(left, right) match {
case (_, Nil) => left, count
case (Nil, _) => right, count
case (leftHead :: leftTail, rightHead :: rightTail) =>
if (leftHead < rightHead){
val (leftList, leftCount) = leftHead :: merge(leftTail, right, count)
return (leftList, leftCount)
}
else {
val (rightList, rightCount) = rightHead :: merge(left, rightTail, count)
val mergeInversions = leftCount + left.length
return (rightList, mergeInversions)
}
}
val inputList: List[Int] = List(10, 3, 5, 1, 7, 6)
val sorted_arr = mergeSort(inputList)
}
解决方案
@sepp2k 在评论中正确指出,如果你想创建一个元组,那么你需要用括号括起来。
这是工作解决方案:
object MergeSort {
def mergeSort(inputList: List[Int]): List[Int] = {
if (inputList.length <= 1) inputList
else {
val (left, right) = inputList.splitAt(inputList.size / 2)
merge(mergeSort(left), mergeSort(right), 0)._1
}
}
def merge(left: List[Int], right: List[Int], count: Int): (List[Int], Int) =
(left, right) match {
case (_, Nil) => (left, count)
case (Nil, _) => (right, count)
case (leftHead :: leftTail, rightHead :: rightTail) =>
if (leftHead < rightHead) {
val left = merge(leftTail, right, count)
val (leftList, leftCount) = (leftHead :: left._1, left._2)
(leftList, leftCount)
} else {
val right = merge(left, rightTail, count)
val (rightList, rightCount) = (rightHead :: right._1, right._2)
val mergeInversions = rightCount + left.length
(rightList, mergeInversions)
}
}
val inputList: List[Int] = List(10, 3, 5, 1, 7, 6, 0)
val sorted_arr = mergeSort(inputList)
}
推荐阅读
- airflow - 在单个气流 dag 中可以安排多少个任务?
- javascript - html元素的高度不会改变
- ios - 将 UITableViewCell 与 ViewModel 绑定并更新 ViewController ViewModel?
- python - Django 访问外键数据以设置字段默认值
- python - 使用 ImageDataGenerator 和 flow_from_directory 时,Keras 中的数据增强是否应用于验证集
- c++ - 将分配器分配给字段 - 我应该将默认分配器创建为全局变量吗?
- sql - SQL:将两个表挂在另一个表的键上,没有所有组合
- javascript - 如何使用 jquery/javascript 或 angular 2/4 解码 sha 256 编码字符串?
- ios - 来自客户的 Apple App Store 证书
- javascript - javascript函数返回失败