巢狀陣列索引(Indexing Cell Arrays)
在基本巢狀陣列中提到過巢狀陣列的元素可以使用大括號 {} 來存取,但若是使用者需要將巢狀陣列中的元素取出並依然保持巢狀陣列,則可以使用小括號 () 來存取,以下的範例示範大括號與小括號的差異:
c = {"1", "2", "3"; "a", "b", "c"; "4", "5", "6"};
使用大括號取出元素:
c{2, 3}
輸出為
ans = c
使用小括號取出元素:
c(2, 3)
輸出為
ans =
{
[1,1] = c
}
由上面的範例可以看出使用大括號是存取巢狀陣列中的元素,而小括號是存取巢狀陣列中的子巢狀陣列。
巢狀陣列的小括號使用方式與一般多維度的陣列相似,例如將巢狀陣列 c 的第一行與第三行中所有的元素都設為 0:
c(:, [1, 3]) = {0}
輸出為
c =
{
[1,1] = 0
[2,1] = 0
[3,1] = 0
[1,2] = 2
[2,2] = b
[3,2] = 5
[1,3] = 0
[2,3] = 0
[3,3] = 0
}
有另外一種寫法也可以:
c(:, [1, 3]) = 0;
這裡的 0 會被 Octave 自動替換為 {0} 然後指定給 c 的子巢狀陣列。
另外一個使用小括號的範例:
c = {1, 2, 3; 4, 5, 6};
c([1, 2], :) = c([2, 1], :)
這會將巢狀陣列 c 的第一行與第二行對調,輸出為
c =
{
[1,1] = 4
[2,1] = 1
[1,2] = 5
[2,2] = 2
[1,3] = 6
[2,3] = 3
}
使用大括號取得巢狀陣列中的元素會傳回逗點分隔序列(請參考逗點分隔序列)。例如使用大括號再將上面的巢狀陣列 c 的第一行與第二行對調回來:
[c{[1, 2], :}] = deal(c{[2, 1], :})
輸出為
c =
{
[1,1] = 1
[2,1] = 4
[1,2] = 2
[2,2] = 5
[1,3] = 3
[2,3] = 6
}
空矩陣 [] 可以用來刪除巢狀陣列中的元素,例如:
x = {"1", "2"; "3", "4"};
x(1, :) = []
輸出為
x =
{
[1,1] = 3
[1,2] = 4
}
使用大括號將巢狀陣列元素的內容刪除,但保留元素的空間:
x = {"1", "2"; "3", "4"};
x{1, 1} = [];
x{1, 2} = [];
x
輸出為
x =
{
[1,1] = [](0x0)
[2,1] = 3
[1,2] = [](0x0)
[2,2] = 4
}