Art*_*hur -3 string haskell list max
仅使用前奏函数,如何返回字符串列表中最长的字符串?
例如
["abc","ab","cb"]
Run Code Online (Sandbox Code Playgroud)
将返回
"abc"
Run Code Online (Sandbox Code Playgroud)
如果您确实想限制自己只使用 Prelude 函数,这里有一个简单的解决方案:
longest :: [String] -> String
longest xss = snd $ maximum $ [(length xs, xs) | xs <- xss]
Run Code Online (Sandbox Code Playgroud)
也就是说,首先将列表中的每个元素与其长度配对,然后根据字典顺序取出最大的对,最后删除该对的长度部分,留下最长的字符串。
正如其他人也指出的那样,允许自己使用其他库,可以使编写此函数变得更加容易。例如,分别导入maximumBy和comparingfromData.Ord和Data.List,使您可以将函数简单地编写为
longest = maximumBy (comparing length)
Run Code Online (Sandbox Code Playgroud)
交易comparingfrom on,Data.List你可以写成
longest = maximumBy (compare `on` length)
Run Code Online (Sandbox Code Playgroud)
最后两个版本的优点是它们具有更通用的类型,即[[a]] -> [a],然后是我上面给出的全 Prelude 函数,它Ord a => [[a]] -> [a]最多可以将其类型推广到。