我需要按索引号将一个列表分为两个,如果奇数到第一个列表,如果偶数到第二个列表。
这是我的功能
def group2(list: List[Int]): (List[Int], List[Int]) = {
def group2Helper(list: List[Int], listA: List[Int], listB: List[Int]): (List[Int], List[Int]) = list match {
case Nil => (listA, listB)
case head :: tail => group2Helper(tail.tail, listA ::: List(head), listB ::: List(tail.head))
}
}
group2(List(2, 6, 7, 9, 0, 4, 1))
结果它必须返回(列表(2,7,0,1(,列表(6,9,4(
现在我有一个问题:"类型不匹配,找到:单位,必需:(List[Int],List[Int](",在最后一个大括号处突出显示
修复丢失的group2helper()
调用后,您的代码仍然无法工作,因为您一次处理两个输入,但输入List
有奇数个元素,因此会导致运行时错误。
一种不同的方法是一次处理一个输入,并不断交换要添加到的列表
def group2(list: List[Int]): (List[Int], List[Int]) = {
def group2Helper(list: List[Int], listA: List[Int], listB: List[Int]): (List[Int], List[Int]) = list match {
case Nil => (listA.reverse, listB.reverse)
case hd :: tl => group2Helper(tl, listB, hd :: listA)
}
group2Helper(list, Nil, Nil)
}
group2(List(2, 6, 7, 9, 0, 4, 1))
//res0: (List[Int], List[Int]) = (List(6, 9, 4),List(2, 7, 0, 1))
有两件事值得注意:1(当构建List
时,通常更有效的方法是预挂起(即向后构建(,然后反转结果;2(输出列表的顺序将取决于输入的元素数量是偶数还是奇数,但每个输出List
的内容都是正确的。
OK,所以有一个简单的解决输出列表顺序问题的方法。
def group2(list: List[Int]): (List[Int], List[Int]) = {
def group2Helper(list: List[Int], listA: List[Int], listB: List[Int]): (List[Int], List[Int]) = list match {
case Nil => (listA.reverse, listB.reverse)
case hd :: Nil => ((hd::listA).reverse, listB.reverse)
case a :: b :: tl => group2Helper(tl, a::listA, b::listB)
}
group2Helper(list, Nil, Nil)
}
这是对原始的一次两个处理的返回,但有两种不同的终止模式。
group2
定义了一个函数,但实际上并没有执行它。在定义了group2helper
之后,请确保您调用了它,这样就可以了。