Haskell - 整数到字符串的二维列表
Haskell - 2D List of Ints to String
我正在寻找将二维列表转换为格式化字符串的方法。
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
。
参加 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
可以提供帮助。
我正在寻找将二维列表转换为格式化字符串的方法。
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
。
参加 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
可以提供帮助。