要處理資料結構中的資料,最簡單的方式就是使用 for 迴圈(請參考 for 敘述)。另外也可以使用 structfun() 函數達到類似的功能,此函數可以將指定的函數套用至資料結構中的每個元素。
structfun (func, s) [a, b] = structfun (...) structfun (..., "ErrorHandler", errfunc) structfun (..., "UniformOutput", val)
structfun(func, s) 函數會將函數 func 套用至資料結構 s 中的每個元素,s 中的每個元素會個別傳入 func 函數中執行。func 可以接受各種函數的形式,包含 inline function、function handle 或函數名稱(字串)。例如:
s = struct("f1", 1, "f2", 2, "f3", 3);
structfun (@(x) x * 2 + 1, s)
這會將資料結構 s 中所有的值乘以 2 再加 1,輸出為
ans = 3 5 7
若參數 "UniformOutput" 設定為 true,則 func 所指定的函數必須傳回一個純量,這些純量會被連接起來而產生一個陣列,若設為 false,則 structfun() 的輸出將會是一個與輸入資料結構 s 有相同欄位的資料結構,其中的值是將 s 中的元素經過 func 函數處理後,再放進輸出資料結構的對應欄位中,在這種情況下輸出的資料形態是沒有限制的。例如:
s.name1 = "John Smith"; s.name2 = "Jill Jones"; structfun (@(x) regexp (x, '(w+)$', "matches"){1}, s, "UniformOutput", false)
輸出為
ans =
{
name1 = Smith
name2 = Jones
}
"ErrorHandler" 參數可以將其後方的 errfunc 設定為錯誤處理函數,當 func 函數產生錯誤時,就會呼叫這個函數,此函數的格式為:
function [...] = errfunc (se, ...)
其中傳入的參數 se 是一個資料結構,其包含的欄位有:"identifier"、"message" 與 "index",分別代表錯誤的代碼與訊息,以及錯誤發生的資料位置。
struct2cell (s)
struct2cell(s) 函數會將資料結構 s 轉為巢狀陣列(cell array),若 f 為資料結構 s 的欄位數,則轉換出來的巢狀陣列維度為 [f size(s)]。例如:
s = struct("f1", "abcd", "f2", "1234");
struct2cell(s)
輸出為
ans =
{
[1,1] = abcd
[2,1] = 1234
}