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?

 採用された回答

Chad Greene
Chad Greene 2017 年 3 月 12 日

1 投票

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 件のコメント

Rightia Rollmann
Rightia Rollmann 2017 年 3 月 12 日
Thanks, but any way to get it done without a for loop?
Jan
Jan 2017 年 3 月 13 日
編集済み: Jan 2017 年 3 月 13 日
@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
Chad Greene
Chad Greene 2017 年 3 月 13 日
Ah, yes, curly braces. Thanks for catching that Jan!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeMatrices and Arrays についてさらに検索

質問済み:

2017 年 3 月 12 日

編集済み:

Jan
2017 年 3 月 13 日

Community Treasure Hunt

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

Start Hunting!

Translated by