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