我有一张如下表格
0 1 2 3
4 5 6 7
8 9 10 11
我想制作以下结构。
┌──────┬──┐ │0 1 2│ 3│ │4 5 6│ 7│ │8 9 10│11│ └──────┴──┘
有人可以帮助我吗?
答案 0 :(得分: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的一般形式;你好
y是我们想要分区的参数,x指定分区的放置位置,如果我们希望结果中包含的frets(分区位置)和值1表示我们,则n为正从左到右工作,你是我们想要应用于分区的动词。
一个棘手的问题: x是(&#39;&#39 ;; 1 0 0 1)因为我们想要数组的整个第一维(行),之后1表示分区的开始。在这种情况下,我们获取所有行并将第一个分区设为前3列,最后1分区使最后一个分区成为自己的列。
此解决方案正在进行中,并且允许以多种不同方式使用它,具体取决于程序员的需求。
答案 1 :(得分: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编程的一部分是定位数据(名词),以便它们更容易被程序(动词)操纵。
答案 2 :(得分: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│
└──────┴──┘
换句话说,&#34;取a
和链接(;
)每行中的前3项,结果是删除{{1}的每一行中的前3项}&#34;
根据确切的使用案例,其他方法和/或结构可能更合适。