how to rename fields in struc and adding new field name
3 ビュー (過去 30 日間)
古いコメントを表示
TESFALEM ALDADA
2020 年 12 月 17 日
コメント済み: TESFALEM ALDADA
2020 年 12 月 21 日
Hello everyone
I have a stuct to work wit and i wonted to rename the field name (XX) by 'Area (km2)' and also i wanted to add new filed column between YY and ZZ as shown below.
wish you best
0 件のコメント
採用された回答
Walter Roberson
2020 年 12 月 17 日
struct fieldnames must be valid MATLAB identifiers, so spaces and brackets are not permitted.
The characters are permitted in the names of Variables in table() objects.
To add a new field at a particular location, the easiest way is to add the new field and then to use orderfields() to change the order.
3 件のコメント
Walter Roberson
2020 年 12 月 21 日
foo = struct('a', 1, 'b', 2, 'd', 4);
foo.c = 3
%new field has been added but it is out of place
newfoo = orderfields(foo, {'d', 'c', 'b', 'a'})
%and now it is in very specific place
その他の回答 (1 件)
Jan
2020 年 12 月 21 日
Adding a field at the end is trivial:
porositiy.newField = [];
Adding a field at a specific location is a bad idea, because the order of fields is not really fixed. But it works:
function S = AddFieldAfter(S, AfterField, NewField, NewData)
SField = fieldnames(S);
SData = struct2cell(S);
nS = numel(S);
sizeS = size(S);
index = find(strcmp(SField, AfterField));
if ~isempty(index)
SField = cat(1, SField(1:index), {NewField}, SField(index + 1:end));
if ~isequal(size(NewData), sizeS)
NewDataC = cell([1, nS]);
NewDataC(:) = {NewData};
end
SData = cat(1, SData(1:index, 1:nS), NewDataC, SData(index + 1:end, 1:nS));
S = reshape(cell2struct(SData, SField), sizeS);
else % Field not found, append at the end:
S.(NewField) = NewData;
end
end
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Structures についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!