這裡列出一些用於操作資料結構欄位的函數。
rmfield (s, f)
rmfield(s, f) 函數會將資料結構 s 中的 f 欄位刪除,若 f 為字串的巢狀陣列或字元矩陣,則會將對應的欄位刪除。例如:
s = struct ("field1", 1, "field2", 2, "field3", 3, "field4", 4);
s2 = rmfield(s, ["field1"; "field3"])
輸出為
s2 =
{
field2 = 2
field4 = 4
}
[k1, ..., v1] = setfield (s, k1, v1, ...)
setfield(s, k1, v1) 會將資料結構 s 中欄位 k1 的值指定為 v1,並傳回新的資料結構。若欄位 k1 不存在,則會自動新增此欄位,例如:
s = struct ("field1", 1, "field2", 2);
s2 = setfield(s, "new_field", "new")
輸出為
s2 =
{
field1 = 1
field2 = 2
new_field = new
}
其功用相當於:
s = struct("field1", 1, "field2", 2);
s2 = s;
s2.new_field = "new"
若是多層次的資料結構,則依序將欄位與索引填入參數中,例如:
sa(1, 1).f0 = 1; sa2 = setfield (sa, {1, 2}, "fd", {3}, "b", 6);
其功用相當於:
sa(1, 1).f0 = 1; sa2 = sa; sa2(1, 2).fd(3).b = 6;
亦可使用另一種寫法:
sa(1, 1).f0 = 1; sa2 = sa; i1 = {1,2}; i2 = "fd"; i3 = {3}; i4 = "b"; sa2(i1{:}).(i2)(i3{:}).(i4) = 6;
[t, p] = orderfields (s1, s2)
orderfields(s1, s2)
函數會將資料結構 s1 的欄位依照 s2 所指定的順序排序後,傳回新的資料結構,若省略 s2 則會以字母的順序排序。參數 s2 可以是資料結構、字串的巢狀陣列或是排序向量。例如:
s1 = struct ("f1", 1, "f2", 2, "f3", 3, "f4", 4);
s2 = struct ("f4", 40, "f1", 10, "f2", 20, "f3", 30);
將 s1 以 s2 的順序排序:
orderfields(s1, s2)
輸出為
ans =
{
f4 = 4
f1 = 1
f2 = 2
f3 = 3
}
以字串的巢狀陣列指定排序方式:
orderfields(s1, {"f2", "f3", "f4", "f1"})
輸出為
ans =
{
f2 = 2
f3 = 3
f4 = 4
f1 = 1
}
以排序向量指定排序方式:
orderfields(s1, [3, 1, 4, 2])
輸出為
ans =
{
f3 = 3
f1 = 1
f4 = 4
f2 = 2
}
fieldnames (struct)
fieldnames(struct) 函數會傳回資料結構 struct 的所有欄位名稱。若指定的 struct 不是資料結構,則會產生錯誤。例如:
s = struct ("f1", 1, "f2", 2, "f3", 3, "f4", 4);
fieldnames(s)
輸出為
ans =
{
[1,1] = f1
[2,1] = f2
[3,1] = f3
[4,1] = f4
}
isfield (expr, name)
isfield(expr, name) 函數會測試資料結構 expr 中是否包含名稱為 name 的欄位,參數 expr 為資料結構,而 name 為字串。例如:
s = struct ("f1", 1, "f2", 2, "f3", 3, "f4", 4);
isfield(s, "f2")
輸出為
ans = 1
[v1, ...] = getfield (s, key, ...)
getfield(s, key, ...) 函數會取出資料結構 s 中指定欄位的資料,例如:
s = struct ("f1", 1, "f2", 2, "f3", 3, "f4", 4);
getfield(s, "f3")
輸出為
ans = 3
多層次的資料結構:
ss(1,2).fd(3).b = 5; getfield (ss, {1,2}, "fd", {3}, "b")
輸出為
ans = 5
亦可使用另一種寫法:
i1 = {1,2}; i2 = "fd"; i3 = {3}; i4= "b";
ss(i1{:}).(i2)(i3{:}).(i4)
substruct (type, subs, ...)
substruct() 函數會建立一個 subscript structure,用於 subsref() 或 subsasgn() 函數。