如何使列表项的长度与haskell中最长的项相同

时间:2019-03-07 09:28:33

标签: haskell functional-programming

例如: makeSame ["ab", "bad", "mammy"],则输出为["ab***","bad**", "mammy"] 为每个遗漏的字符获取一个'*'

makeSame:: [String] -> [String]
makeSame m = let f = length  (last (sort m))
  in 
    (\x ->replicate length x x ++'*') m

但是甚至没有编译。

2 个答案:

答案 0 :(得分:3)

要获得最大长度,您可以:

maxLength list = maximum $ map length list

使用replicate复制字符(示例replicate 3 '*'给出"***")。

您需要做的就是结合这两种方法。

要确定丢失的字符数,您需要从最大长度中减去字符串的长度(length "somestring"给您)。

答案 1 :(得分:3)

这是@talex提供的具有辅助功能的解决方案

longest :: [String] -> Int
longest m = maximum $ map length m

makeSame :: [String] -> [String]
makeSame m = map (\ x -> x ++ replicate (longest m- length x) '*') m