Pharo中如何将普通对象数组以表格格式展示
Pharo 中 Candle 对象数组的表格输出实现
我持有一组Candle对象组成的普通数组,结构参考如下:
需要将数组输出为如下对齐格式的表格:
| date | open | high | low | close | |------------+------+------+-----+-------| | 2018-12-28 | 10 | 20 | 30 | 40 | | 2019-12-28 | 50 | 60 | 70 | 80 |
纯文本表格输出方法
不需要安装额外依赖、不需要自定义集合类,直接在Pharo里写少量代码就能实现普通数组的对齐文本表格输出:
- 核心逻辑是先统计每列(表头+所有行内容)的最大字符宽度,再按宽度做左右对齐,最后拼接表头、分隔线和数据行即可。
- 可直接复用的实现代码片段:
"配置列:每列的表头名 + 从Candle对象取对应值的方法" columnDefs := { 'date' -> #date. 'open' -> #open. 'high' -> #high. 'low' -> #low. 'close' -> #close }. "计算每列需要的显示宽度" colWidths := columnDefs collect: [ :def | headerWidth := def key size. contentMaxWidth := (candleArray collect: [ :c | (c perform: def value) asString size ]) max. headerWidth max: contentMaxWidth ]. "拼接表头行" headerLine := '| ' , (columnDefs with: colWidths collect: [ :def :w | def key padRightTo: w ]) joinUsing: ' | ' , ' |'. "拼接表头和内容之间的分隔线" splitLine := '|' , (colWidths collect: [ :w | '-' repeat: w + 2 ]) joinUsing: '+' , '|'. "拼接所有数据行" dataLines := candleArray collect: [ :c | '| ' , (columnDefs with: colWidths collect: [ :def :w | ((c perform: def value) asString padLeftTo: w) ]) joinUsing: ' | ' , ' |' ]. "组合成完整表格输出" tableContent := { headerLine. splitLine }, dataLines joinUsing: String cr. Transcript show: tableContent.
- 把代码里的
candleArray替换成你持有的实际数组变量,执行后就能在Transcript里得到对齐的目标格式表格。
Glamorous Toolkit 可视化表格方案
GT的表格展示能力参考如下:
该能力不需要自定义专门的Candle集合类就能直接适配普通数组:
- 临时快速展示的场景完全不用写代码:在Playground里选中你的Candle数组打开检视器,点击检视器顶部的
+按钮添加列,依次给每列绑定date/open/high/low/close的取值逻辑,就能即时生成可交互的表格视图。 - 如果需要长期复用这个视图,也不用新建集合类:直接给
Array类写一个带GT pragma的扩展方法,方法内判断数组元素为Candle类型时渲染对应列的表格即可,所有存放Candle对象的普通数组都能自动显示这个表格视图。 - 新建专属集合类的方案只适合你要给K线数据封装专属业务逻辑的场景,普通展示需求用上述两种轻量方案就足够,GT原生支持直接给普通数组配置表格视图。
内容的提问来源于stack exchange,提问作者dharmatech
相关产品推荐
相关产品推荐

