필터 지우기
필터 지우기

How to programmatically modify substructure with arbitrary number of levels?

조회 수: 8 (최근 30일)
I am trying to create a function that can modify a field in an arbitrary deep structure in the following way:
function modified_struct = modify_field(original_struct, field_name_cell_aray, new_value)
For instance if I have an original_struct such that
original_struct.a.b = 1
calling
modified_struct = modify_field(original_struct, {'a', 'b'}, 2)
would create the following operations
modified_struct = original_struct
modified_struct.(a).(b) = 2
This should work for a struct with an arbitrary number of levels:
modified_struct = modify_field(original_struct, {'a', 'b', 'c', 'd'}, new_value)
I want a solution that does not use the eval() command since I need to use this in a parfor loop.
Is this possible in matlab?

채택된 답변

Stephen23
Stephen23 2022년 4월 13일
편집: Stephen23 2022년 4월 13일
I would not write a function for this, just use SETFIELD with a comma-separated list:
S.a.b = 1;
C = {'a','b'};
N = 2;
S = setfield(S, C{:}, N);
Checking:
S.a.b
ans = 2

추가 답변 (1개)

Jean-Baptiste Lanfrey
Jean-Baptiste Lanfrey 2022년 4월 13일
If I understand correctly, all you need is to use the setfield command, for example:
modified_struct = setfield(original_struct, 'a', 'b', 2)
The field arguments are not in a cell array but I guess it is easy enough to accomodate for this.

카테고리

Help CenterFile Exchange에서 Structures에 대해 자세히 알아보기

태그

제품


릴리스

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by