2013-07-25 23 views
1

我有一个表像下面的切片表分为两个部分和框它之后

0 1 2 3 
4 5 6 7 
8 9 10 11 

,我想作以下的结构。

┌──────┬──┐ 
│0 1 2│ 3│ 
│4 5 6│ 7│ 
│8 9 10│11│ 
└──────┴──┘ 

任何人都可以帮我吗?

回答

3

而在J中总有另一种方式!

]a=. i. 3 4 
0 1 2 3 
4 5 6 7 
8 9 10 11 
    ('' ;1 0 0 1) <;.1 a 
┌──────┬──┐ 
│0 1 2│ 3│ 
│4 5 6│ 7│ 
│8 9 10│11│ 
└──────┴──┘ 

这使用了与x u;的一般形式的二元切割连词(;。)。 n

y是我们想要分割的参数,x指定放置分区的位置,如果我们希望结果中包含音品(分区位置),则n是正值,1表示值意味着我们从左到右工作,而u是我们想要应用到分区的动词。因为我们需要数组(行)的整个第一维,在这之后1表示分区开始。因此我们需要一个数组(行)的整个第一维。在这种情况下,我们获取所有行并将第一个分区作为前3列,最后1将最后一个分区作为自己的列。

在这个解决方案中有很多事情要做,并且这可以根据程序员的需要以多种不同方式使用。

+0

谢谢鲍勃。有没有像你为这一行做的一样的方法,比如让'0 1 2 3; 4 5 6 7;'装箱,然后装入'8 9 10 11'? – Eric

+0

如果我得到您的问题,您可以将第一个'''放在x中,这样就可以根据分区对行进行装箱以及对列进行装箱。 (1 0 0 1)<;。1“1 a – bob

1

这里有一种方法:

]a=: i. 3 4 
0 1 2 3 
4 5 6 7 
8 9 10 11 
    3 ({."1 ; }."1) a 
┌──────┬──┐ 
│0 1 2│ 3│ 
│4 5 6│ 7│ 
│8 9 10│11│ 
└──────┴──┘ 

在“与a每一行中丢弃所述第一3项的结果,可以采取的a和链接(;)每行中的前3项”换言之

根据确切的使用情况,其他方法和/或结构可能更合适。

2

问题的标题(“将表格分成两部分,然后将其框起来”)表明您所画的示例可能不会反映出您想要学习的内容。

我的印象是,你认为你的结果名词是一个两轴表格,分为两部分。这种解释的主要问题是盒子非常彻底地分割它们的内容。需要特别的努力才能让第二个盒子中的数字看起来像是从第一个盒子中的结构中剪下来的。这样的努力很少值得。

如果需要采取3 7 11并将其作为一个单元从其出现的结构中移除,那么将它作为表格的一行而非列是有利的。 2轴表总是1轴列表的列表。如果你的问题是分离项目的问题,原子的这个方向使得它更简单。

把这个付诸实践,在这里我们处理行而不是列:

aa=: |:i.3 4 
    aa 
0 4 8 
1 5 9 
2 6 10 
3 7 11 

    (}: ; {:) aa 
+------+------+ 
|0 4 8|3 7 11| 
|1 5 9|  | 
|2 6 10|  | 
+------+------+ 

程序,在括号中,可以从字面上是“遏制链接尾巴”读。这是我希望从你的问题标题中得到的那种程序。

有效的J编程的一部分是定位数据(名词),使它们更容易被程序(动词)操纵。

相关问题