String 在Haskell中查找文本表中列的最长单词
我有一个定义为字符串列表的文本表:String 在Haskell中查找文本表中列的最长单词,string,list,haskell,max,String,List,Haskell,Max,我有一个定义为字符串列表的文本表: type Field = String type Row = [Field] type Table = [Row] 我想创建一个函数,可以找到每列最长单词的宽度,如下所示: columnWidths :: Table -> [Int] ["asd", "ffdd"," 12345"] ["dd ss aa","123", "1dssd"] 如果有人输入这样的文本表: columnWidths :: Table -> [Int] ["as
type Field = String
type Row = [Field]
type Table = [Row]
我想创建一个函数,可以找到每列最长单词的宽度,如下所示:
columnWidths :: Table -> [Int]
["asd", "ffdd"," 12345"]
["dd ss aa","123", "1dssd"]
如果有人输入这样的文本表:
columnWidths :: Table -> [Int]
["asd", "ffdd"," 12345"]
["dd ss aa","123", "1dssd"]
它应该返回宽度:
[8,4,5]
我尝试了一些方法,包括贴图、最大长度和转置,但我似乎无法使其工作。所以我做了以下操作:
map length
查找表中每个文本项的长度,但我将其映射到整个表中,因此map(map length)
作为Arnon答案的变体,我们也可以先转置,然后映射:
> map maximum . map (map length) . transpose $ table
[8,4,5]
通过利用map
的函子定律,我们可以进一步简化上面的代码,它表示map f。地图g=地图(f.g)
:
谢谢@chi。我试图保持它的简单,以显示逻辑步骤。