我想将2D列表转换为格式化的字符串。
table :: [[Int]] -> String
Input: [[11,2,30],[4,555,9]]
Output: " 11 2 30 \n 4 555 6 \n"
11 2 30
4 555 9
基本上需要能够以网格形状打印并保持格式以计入最大值。
我知道对于简单的列表,我可以根据ghci映射显示[1,2,3,4] -> ["1","2","3","4"]
。似乎可以将其保留为列表吗?
不知道如何遍历2D并继续串联为字符串并根据需要添加\n
。
答案 0 :(得分:1)
在REPL比赛可以提供帮助。
> :t '1'
'1' :: Char
> :t "1"
"1" :: [Char]
> ['1','2']
"12" :: [Char]
> :t concat
concat :: [[a]] -> [a]
> concat ( map show [1,2,3,4] )
.....
> concat [ show x | x <- [1,2,3,4] ]
.....
> concat [ " " ++ ( ensureWidth 9 (show x) ) | x <- [1,2,3,4] ]
.....
> :t replicate
replicate :: Int -> a -> [a]
> replicate 2 '1'
"11" :: [Char]
现在您需要编写函数
ensureWidth w s = replicate n ' ' ++ s
但是要使用什么n
?为此,您将需要知道s
的长度。函数length
可以提供帮助。