How to Change Values of a Field by an Indexing Array?

Here’s my initial struct:
A(1).B.C = 'a';
A(2).B.C = 'b';
A(3).B.C = 'a';
A(4).B.C = 'a';
I want to change the values of C based on values of Values and indexes of IndexingArray:
Values = {'a', 'b'}
IndexingArray = [1 1 0 1];
So, my struct will be:
A(1).B.C = 'b';
A(2).B.C = 'b';
A(3).B.C = 'a';
A(4).B.C = 'b';
What is the solution?

 Akzeptierte Antwort

Chad Greene
Chad Greene am 12 Mär. 2017
You could change each element individually via loop. But make sure you add 1 to the indexing array values because Matlab starts indexing at 1, not 0.
for k = 1:length(A)
A(k).B.C = Values(IndexingArray(k)+1);
end

3 Kommentare

Thanks, but any way to get it done without a for loop?
Jan
Jan am 13 Mär. 2017
Bearbeitet: Jan am 13 Mär. 2017
@Rightia Rollmann: The nested struct is a complicated method to represent data. In consequence the method to access the values is not trivial anymore. This loop is efficient and compact. (+1)
Assumingly a typo:
A(k).B.C = Values{IndexingArray(k)+1}; % Curly braces
Ah, yes, curly braces. Thanks for catching that Jan!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Matrices and Arrays finden Sie in Hilfe-Center und File Exchange

Gefragt:

am 12 Mär. 2017

Bearbeitet:

Jan
am 13 Mär. 2017

Community Treasure Hunt

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

Start Hunting!

Translated by