我的一个练习要求我编写一个递归方法,其中给出一个列表,并返回相同的列表,其中只包含其他所有元素。
例如:列表{“a”,“b”,“c”}将返回 列表{ “一”, “C”}
我是用scala编写的,我知道它已经内置了库,但我不应该使用它们。我只能使用if / else,helper方法和模式。
我怎样才能使用头部和尾部解析列表?
到目前为止,我有这个:def removeLetter(list:List[String]):List[String]=list match{
case Nil => Nil
case n::rest=>
if (n == rest){ // I understand that this doesn't quite work.
tail
}
else
head::removeLetter(tail)
}
}
我正在寻找逻辑,而不是代码。
答案 0 :(得分:2)
使用模式匹配,您也可以使用与n::rest
构造相同的方式解构前两个元素的列表。请记住还要考虑长度不均匀的列表。
答案 1 :(得分:0)
case Nil => Nil
case x :: Nil => x :: Nil
case x :: y :: z => x :: removeLetter(z)
(请注意,此处x
和y
都属于String
类型,z
类型为List[String]
)备注:如果你愿意,你也可以结合两种基本情况,因为在这两种情况下,函数的输入都是它的输出。