如果第一个列表奇数,第二个偶数,我需要按索引号将一个列表分为两个。
这是我的职能
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))
结果它必须返回(List(2,7,0,1),List(6,9,4))
现在我遇到问题:“类型不匹配,找到:单位,必需:(列表[Int],列表[Int])”,最后大括号突出显示
答案 0 :(得分:2)
group2
定义了一个函数,但实际上并未执行。定义group2helper
后,请确保调用它,并且应该没问题。
答案 1 :(得分:2)
修复了丢失的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
的内容都是正确的。
好的,因此有一个简单的解决方法,用于解决输出顺序列表问题。
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)
}
这是对原始的一次两次处理的返回,但是具有两种不同的终止方式。