与其更改值,不如重建结构数组更简单。
通过以下方式获取价值IndexingArray
:
val = Values(IndexingArray+1);
使用 构建结构数组cell2struct
,并使用 转换为元胞数组num2cell
:
T = num2cell(cell2struct(val, {'C'}, 1));
使用以下命令将T
结果转换为结构数组cell2struct
:
A = cell2struct(T', {'B'}, 1);
这是创建 A 的代码示例:
Values = {'a', 'b'};
IndexingArray = [1 1 0 1];
val = Values(IndexingArray+1);
T = num2cell(cell2struct(val, {'C'}, 1));
A = cell2struct(T', {'B'}, 1);
在一行代码中构建 A:
A = cell2struct((num2cell(cell2struct(Values(IndexingArray+1), {'C'}, 1)))', {'B'}, 1);
结果(用于测试):
>> A(1).B.C
ans =
b
>> A(2).B.C
ans =
b
>> A(3).B.C
ans =
a
>> A(4).B.C
ans =
b
解决方案使用arrayfun
:
val = Values(IndexingArray+1);
A = arrayfun(@(x) struct('B', struct('C', val{x})), 1:4)
更新 A 的特定元素:
如果您需要更新特定元素,而不是覆盖A
,您可以arrayfun
有选择地应用到索引,您知道您需要更新。
例子:
假设A
长度为6个元素,并且需要更新前4个,可以使用如下代码:
A(1:4) = arrayfun(@(x) struct('B', struct('C', val{x})), 1:4);
假设您知道您只需要更新A(1)
和A(4)
,您可以使用以下示例:
A(1).B.C = 'a';
A(2).B.C = 'b';
A(3).B.C = 'a';
A(4).B.C = 'a';
A(5).B.C = 'c';
A(6).B.C = 'd';
Values = {'a', 'b'};
IndexingArray = [1 1 0 1];
val = Values(IndexingArray+1);
%List of indices of A to update
indices = [1, 4];
A(indices) = arrayfun(@(x) struct('B', struct('C', val{x})), indices);