如何从列表中生成以下盒装数据

时间:2013-07-20 20:05:27

标签: j

J中,我有一个类似1 2 3的列表,我想将*:2*设为像

这样的框结构
┌─┬─┐
│1│2│
│4│4│
│9│6│
└─┴─┘

甚至

┌───┐
│1 2│
├───┤
│4 4│
├───┤
│9 6│
└───┘

怎么做?我非常感谢你的帮助。

2 个答案:

答案 0 :(得分:1)

您需要evoke a gerund追加模式(:0)。

a =: 1 2 3
*:`+: (`:0) a
1 4 9
2 4 6

如果您需要将它们装箱,只需;/它们:

;/*:`+: (`:0) a
┌─────┬─────┐
│1 4 9│2 4 6│
└─────┴─────┘
;/ |:  *:`+: (`:0) a      NB. different axis
┌───┬───┬───┐
│1 2│4 4│9 6│
└───┴───┴───┘
 _3 <\6 1 $,*:`+: (`:0) a   NB. yet another axis
┌─┬─┐
│1│2│
│4│4│
│9│6│
└─┴─┘

答案 1 :(得分:1)

如果您想要垂直(面向列)输出,则应首先将列表转换为垂直(面向列)格式:

    ,.1 2 3
 1
 2
 3

现在您可以应用任意数量的计算。如果要将每个输出放在一个单独的框中,可以使用;在叉子里:

    (*: ; 2&*) ,. 1 2 3

两个注释:

  • 在J中,当所有数据的类型和形状相同时,使用框是不常见的,也是不必要的。在您的情况下,您的操作都是标量和数字,因此两个动词都会产生1x3的数字列。将它们与,.组合以生成2x3数字表而不是;以生成2个不透明框将更为典型和惯用。

  • “Double”已经是J中的原语,因此我们可以2&*代替+:而不是(*: ; +:) ,. 1 2 3