結構操作(Manipulating Structures)
這裡列出一些用於操作資料結構欄位的函數。
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()
函數。