2017-06-05 74 views
0

我有一個帶有5個字段('a','b','c','d','e')的1x1 Matlab結構。每個字段包含某種數據(這對我的問題並不重要),我想從結構中提取每個值並將其分配給一個名爲字段的變量。任何想法的代碼將做到這一點?將結構體值提取到名爲字段的變量中

+1

就這麼簡單:'a = yourStruct.a'。等等其他領域。 – kostek

+2

您是否想要將其推廣到任意數量的任意命名的字段?將值存儲在一個結構中可能會更好,因爲它比一堆變量組織得更好。 – gnovice

+1

我想自動執行 – pyigal

回答

3

假設s是你的結構

cellfun(@(x) assignin('base', x, s.(x)), fieldnames(s)); 

不過,我沒有看到一個很好的用例爲這是已經被gnovice提及。

1

如果你知道什麼是要創建的變量,那麼你可以寫(假設s是你的結構):

C = struct2cell(s); 
[a,b,c,d,e] = C{:}; 

否則,您需要創建未聲明的新變量,程序運行(使用時assignin命令@Vahe-Tshitoyan answer),這是一個壞主意。

3

雖然它通常是而不是當您已經將數據整齊地存儲在結構中時,將數據分散到一堆變量中的最佳實踐是將結構字段移動到不需要硬編碼的變量的簡單方法你的領域/變量的名稱將使用saveload命令,像這樣:

s = struct('a', 1, 'b', 2, 'c', 3); % A sample structure 
save('temp.mat', '-struct', 's'); % Save fields to a .mat file 
clear all       % Clear local variables (just for display purposes) 
load('temp.mat');     % Load the variables from the file 
whos         % Display local variables 

    Name  Size   Bytes Class  Attributes 

    a   1x1     8 double    
    b   1x1     8 double    
    c   1x1     8 double 

臨:這是很容易的,適用於任何結構。 Con:它涉及將數據移入和移出文件。