Haskell 以表格格式打印带有标题的地图
在Haskell中给定一个整数映射(Map Int),当我使用print(myMap)时,我可以打印如下输出: 但是,我需要它以表格格式显示,标题如下:Haskell 以表格格式打印带有标题的地图,haskell,Haskell,在Haskell中给定一个整数映射(Map Int),当我使用print(myMap)时,我可以打印如下输出: 但是,我需要它以表格格式显示,标题如下: ID COUNT 1 7 2 24 3 7 是否有内置的Haskell将地图显示到表中,或生成表视图的方法? 谢谢,hackage上的库可用于打印具有可打印值的表视图 {-# LANGUAGE FlexibleInstances #-} import qualified Text.PrettyPrint.Boxes as PB cl
ID COUNT
1 7
2 24
3 7
是否有内置的Haskell将地图显示到表中,或生成表视图的方法?
谢谢,hackage上的库可用于打印具有可打印值的表视图
{-# LANGUAGE FlexibleInstances #-}
import qualified Text.PrettyPrint.Boxes as PB
class Pretty a where
ppr :: a -> PB.Box
instance Pretty String where
ppr = PB.text
instance Pretty Integer where
ppr = PB.text . show
col :: (Pretty a, Pretty t) => (t, [a]) -> PB.Box
col (a, xs) = PB.vcat PB.left $ lab ++ vals
where
lab = [ppr a]
vals = fmap ppr xs
ex1 :: String
ex1 = PB.render $ PB.hsep 1 PB.left $ fmap col cols
where
cols :: [(String, [Integer])]
cols = [
("ID" , [1,2,3]),
("COUNT" , [7,24,7])
]
main :: IO ()
main = putStrLn ex1
-- ID COUNT
-- 1 7
-- 2 24
-- 3 7
“进桌”真的很模糊
printRow(a,b)=print$(show a)+“\t”++(show b)
是最简单的方法get@BartekBanachewicz很抱歉我只是想把它输出成我的例子中类似于表格的东西:)@BartekBanachewicz但是我该如何处理标题呢?只需输出“ID\t计数”
?@BartekBanachewicz我得到了你的建议,它看起来很棒,但我不知道如何获取我的地图(myMap)并将其传递给你的打印行(a,b)-我尝试了暴力(复制/粘贴)和I get error无法将预期类型(a0,a1)与实际类型映射Int匹配(1)您似乎没有使用PP
导入(2)虽然它在这里工作,因为每一行的高度都是1,但我觉得library缺少了用宽度和高度都不同的盒子方便地制作表格网格的功能。@ØrjanJohansen也有一个简单的解决方案,但是原始海报没有提到需要这种行为,所以没有必要使事情复杂化。
{-# LANGUAGE FlexibleInstances #-}
import qualified Text.PrettyPrint.Boxes as PB
class Pretty a where
ppr :: a -> PB.Box
instance Pretty String where
ppr = PB.text
instance Pretty Integer where
ppr = PB.text . show
col :: (Pretty a, Pretty t) => (t, [a]) -> PB.Box
col (a, xs) = PB.vcat PB.left $ lab ++ vals
where
lab = [ppr a]
vals = fmap ppr xs
ex1 :: String
ex1 = PB.render $ PB.hsep 1 PB.left $ fmap col cols
where
cols :: [(String, [Integer])]
cols = [
("ID" , [1,2,3]),
("COUNT" , [7,24,7])
]
main :: IO ()
main = putStrLn ex1
-- ID COUNT
-- 1 7
-- 2 24
-- 3 7