Using the fields of a structure to index through a vector and generate a resulting structure

2 views (last 30 days)
dataArray = [21,22,23,24,25,26,27,28,29,30];
structureOfIndexes.a1 = [2,5,8];
structureOfIndexes.a2 = [3,4];
structureOfIndexes.a3 = [1,2,3,5,9];
% How do I use the structure of indexes to generate the 'resultStructure'(seen below)
resultStructure.a1 = [22,25,28];
resultStructure.a2 = [23,24];
resultStructure.a3 = [21,22,23,25,29];
% without using a for-loop to index through a1,a2,a3

Accepted Answer

Eric Delgado
Eric Delgado on 27 Sep 2022
Hey @Scorp, structfun is the answer for your issue! :)
dataArray = [21,22,23,24,25,26,27,28,29,30];
structureOfIndexes.a1 = [2,5,8];
structureOfIndexes.a2 = [3,4];
structureOfIndexes.a3 = [1,2,3,5,9];
resultStructure = structfun(@(x) dataArray(x), structureOfIndexes, "UniformOutput", false)
resultStructure = struct with fields:
a1: [22 25 28] a2: [23 24] a3: [21 22 23 25 29]
  1 Comment
Scorp
Scorp on 27 Sep 2022
%Thank you for your reply, a further question:
%if I want to grab the next 3 values in dataArray from each index such that:
dataArray = [21,22,23,24,25,26,27,28,29,30];
structureOfIndexes.a1 = [2,8];
% Trying the code below yields a1: [22 23 24]
resultStructure = structfun(@(x) dataArray(x:x+2), structureOfIndexes, "UniformOutput", false)
resultStructure = struct with fields:
a1: [22 23 24]
% but I want the output to be: resultStructure.a1 = [22,23,24,28,29,30];

Sign in to comment.

More Answers (0)

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by