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

2 views (last 30 days)
Scorp on 27 Sep 2022
Commented: Scorp on 27 Sep 2022
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
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### Accepted Answer

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 CommentShowHide None
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.

### Categories

Find more on Matrix Indexing in Help Center and File Exchange

R2022a

### Community Treasure Hunt

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

Start Hunting!

Translated by