2013-07-25 25 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編程的一部分是定位數據(名詞),使它們更容易被程序(動詞)操縱。

相關問題