你幾乎在那裏用你的方法。最簡單的解決將是存儲a
作爲一個單元陣列,而不是一個數值數組,以便採取MATLAB的列表擴展的優勢:
s(1)=struct('field1', 11, 'field2', 12, 'field3', 13);
s(2)=struct('field1', 21, 'field2', 22, 'field3', 23);
a = {s.field1};
[s.field1] = s.field2;
[s.field2] = a{:};
凡[s.field1; s.field2]
從雲:
ans =
11 21
12 22
要:
ans =
12 22
11 21
對於一個更通用的方法,你可以UT斯達康ilize struct2cell
和cell2struct
交換領域:
function s = testcode
s(1)=struct('field1', 11, 'field2', 12, 'field3', 13);
s(2)=struct('field1', 21, 'field2', 22, 'field3', 23);
s = swapfields(s, 'field1', 'field2');
end
function output = swapfields(s, a, b)
d = struct2cell(s);
n = fieldnames(s);
% Use logical indexing to rename the 'a' field to 'b' and vice-versa
maska = strcmp(n, a);
maskb = strcmp(n, b);
n(maska) = {b};
n(maskb) = {a};
% Rebuild our data structure with the new fieldnames
% orderfields sorts the fields in dictionary order, optional step
output = orderfields(cell2struct(d, n));
end
它提供了相同的結果。
總是用語言標記問題。 –
@JohnnyMopp對不起,忘記了!感謝提醒 –
請不要污衊你的問題。 – JAL