How to apply a for loop in all tables with common indexing

조회 수: 1 (최근 30일)
Usune Elizondo
Usune Elizondo 2021년 9월 27일
댓글: Usune Elizondo 2021년 10월 4일
Hello,
I have a structure where multiple tables are combined. So I can access them by indexing.
I would like to apply a for loop in all the tables that have a common index.
I have more structures like the HYT, I would like to format all the tables that contain FLS in the indexing and all the tables that contain ULS.
So *.FLS. and *.ULS. the HYT. will be different for each structure but FLS and ULS will always be there as well as Float and LR inside each FLS and ULS.
So the variables in the workspace look like this:
HYT
ABC
DEF
then inside each of them we have both FLS and ULS with the Float and LR. I want to apply same actions and calculations to all tables inside FLS and all inside ULS for all the variables in the workspace.
Thank you very much in advance.
  댓글 수: 4
Stephen23
Stephen23 2021년 9월 30일
편집: Stephen23 2021년 9월 30일
S(1).name = 'HYS';
S(1).HLS = struct('FLS',..,'ULS',..):
S(1).ULS = struct(..);
S(2).name = 'ABC';
S(2).HLS = struct('FLS',..,'ULS',..):
S(2).ULS = struct(..);
S(3).name = 'DEF';
.. etc etc etc
This data is simple and efficient to loop over, you can use basic indexing and fieldnames to access all of the data. The meta-data are stored simply as under the "name" field, which you can trivially access:
(probably even better data design would be to "flatten" those structures so that they are not nested)
In contrast your poor data design requires slow, complex, and inefficient access (such as the code given in this answer):
Being "quite new" is not a problem, because that is the right time to learn how to write good MATLAB code!
Usune Elizondo
Usune Elizondo 2021년 10월 1일
Thank you very much for your support and clear explanation!

댓글을 달려면 로그인하십시오.

답변 (1개)

Shanmukha Voggu
Shanmukha Voggu 2021년 9월 30일
Hi Usene,
Follow the steps in order to achieve the solution
1)Use who and eval to loop over the workspace variables
2)Inside the previous loop start the second loop to iterate over FLS and ULS
3)Finally inside the second loop start the third loop to iterate over FLOAT and LR to make the calculations that are needed to be done on tables
Refer to this for more information.
  댓글 수: 4
Stephen23
Stephen23 2021년 10월 4일
"Now I have the data as you suggested. e.g. S(1).FLS has 3 tables inside, how can I apply a for loop to all tables inside S(1).FLS."
Based on what you have explained so far and making a few guesses, perhaps something like this:
for ii = 1:numel(S)
C = fieldnames(S(ii).FLS);
for jj = 1:numel(C)
T = S(ii).(C{jj})
.. do whatever with table T
end
end
Usune Elizondo
Usune Elizondo 2021년 10월 4일
Thank you so much!

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

제품


릴리스

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by