我正试图围绕功能编程概念。考虑从列表中删除空(零长度)字符串的问题
以下是Haskell中一个纯粹的功能实现,即使你对语言一无所知也是非常易读的
removeEmpty :: [String] -> [String]
removeEmpty [] = []
removeEmpty ([] :strs) = removeEmpty strs
removeEmpty (str:strs) = str : removeEmpty strs
现在考虑我在Scala中的实现
def removeEmpty(dirty: List[String]): List[String] = {
if (Nil == dirty)
dirty
else {
if (dirty(0).length() == 0)
removeEmpty(dirty.tail)
else
dirty.head::removeEmpty(dirty.tail)
}
}
它做了同样的事情,但对它有一种非常程序化的感觉。是否有更多功能的方法在Scala中编写相同的方法?
答案 0 :(得分:10)
def removeEmpty(dirty: List[String]): List[String] = dirty match {
case Nil => Nil
case "" :: xs => removeEmpty(xs)
case x :: xs => x :: removeEmpty(xs)
}
Dirk的答案可能包含更好的解决方案,但我认为我的答案更接近原始答案。
答案 1 :(得分:8)
我想到的第一件事是
list.filter(_.length > 0)
不确定,这是否符合您“更具功能性”的标准,正如您未指定的那样,意味着什么......