首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在haskell中打印2D列表

在haskell中打印2D列表
EN

Stack Overflow用户
提问于 2014-10-24 10:53:17
回答 2查看 1.6K关注 0票数 0

如果我有列表列表,并且我想要创建一个表,那么它们都对齐了,所有的列都对齐了。我开始了,但不知道怎么继续。

代码语言:javascript
复制
table xxs
    | length (nub [length xs | xs <- xxs])/=1 = error "not simetric"
    | otherwise = (mapM_ print) [ xs | xs <- xxs]

bignumber xxs = maximum [length (show (maximum xs))| xs<-xxs]

示例:

代码语言:javascript
复制
table [[1,2,456],[34,2,34]-->

  1   1 456
 34   2  34
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-24 12:08:03

您可以使用printf进行打印,也可以使用transpose计算列的maxlen

代码语言:javascript
复制
import Text.Printf
import Data.List (transpose)

table = undefined

showtable xxs = mapM_ (showrow. zip maxlens) xxs
  where
    maxlens = map (show . (+ 1)) $ foldr (max.length.show) 0 $ transpose xxs
    showcell (maxl,c) = printf ("%" ++ ml ++ "s") $ show c
    showrow xs = mapM_ showcell xs >> putStrLn "" 
票数 1
EN

Stack Overflow用户

发布于 2014-10-24 11:28:30

不如:

代码语言:javascript
复制
import Data.List

print_ x =  putStr $ (show x) ++ "\t" 

table xxs 
    | length (nub [length xs | xs <- xxs])/=1 = error "not simetric"
    | otherwise = mapM_ printRow xxs 
        where printRow xs =  (mapM_ print_) xs >> putStrLn "" 

演示:

代码语言:javascript
复制
table [[1,2,456],[34,2,34]]
1   2   456  
34  2   34
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26546523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档