for文のindexに構造体配列の要素を使いたい

조회 수: 65 (최근 30일)
gafakel
gafakel 2021년 6월 1일
댓글: gafakel 2021년 6월 15일
例えば次のようなfor文を書くとします。
sum=0;
for k=1:5
sum=sum+k;
end
fprintf("%d",sum);
このとき、次のようにfor文のindexに構造体配列の要素を使いたいのですが、何かいい方法がありませんでしょうか?(このままだとエラーになる)
sum=0;
for time.k=1:5
sum=sum+time.k;
end
fprintf("%d",sum);
これは自分のプログラムの中で、構造体の要素にアクセスするためにfor文を使うことが多いことが理由です。indexとして用いる変数の数が多くなったことから、1つのtimeという構造体配列にまとめたいと考えましたが、エラーで実行できないので……。
今のところは次のようにしようと考えています。疑似的に実現したに過ぎないのですが……。
sum=0;
time.k.val=0;
for k=time.k.val+1:5
sum=sum+k;
time.k.val=k;
end
fprintf("%d",sum);
clear k
  댓글 수: 1
gafakel
gafakel 2021년 6월 1일
質問の意図がわかりづらくて申し訳ありません。要は下のような状況で、「for文の繰り返しのインデックス(合ってますでしょうか?)として構造体の要素を使いたい、という形です。
sum=0;
time.k=0; %構造体timeに対して要素kを定義
for time.k=1:5 %for文の繰り返し単位としてi,k等ではなく「time.k」を使いたい
sum=sum+1; %ここの処理はなんでもいい(time.kは関係しない)
end
fprintf("%d",sum);
for文の中でtime.kにアクセスする必要はないため、紛らわしくなってしまいました。失礼いたしました。

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

채택된 답변

Hernia Baby
Hernia Baby 2021년 6월 1일
time.kの中に何かしらの変数が入っている物だと認識して回答します。
for文の中にindexに該当する番号を入れると構造体i番目の数値を代入できます。
以下のコードではtime.kが1~9の変数を持っており、それをfor文内で総和を取ってます。
clear,clc;
time = struct('k',[1:2:10]);
sum=0;
for i=1:length(time.k)
sum=sum+time.k(i);
end
  댓글 수: 3
Hernia Baby
Hernia Baby 2021년 6월 1일
返信ありがとうございます。本件理解しました。
pythonでいうところの
 for i in struct:
 sum = sum + i
ですかね。
---------------------------
以下のようにすればいけます。
clear,clc;
time = struct('k',[1:2:10]);
sum=0;
for i = time.k
sum=sum+i;
end
for文のドキュメントに配列をそのままインデックスとして格納できる旨が書かれていました。
gafakel
gafakel 2021년 6월 15일
返信が遅くなり大変申し訳ありませんでした。ご回答いただきありがとうございます。

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

추가 답변 (1개)

Atsushi Ueno
Atsushi Ueno 2021년 6월 1일
time = struct('k',0);
time.k = struct('val',0);
のように構造体を定義すれば動作します。
  댓글 수: 2
Atsushi Ueno
Atsushi Ueno 2021년 6월 1일
申し訳ありません勘違いがありました。上記の定義が無くても動作します。
gafakel
gafakel 2021년 6월 1일
ご回答いただきありがとうございます。いただいたコードから次のようにしたのですが「演算子の使用が無効です。」としてエラーになってしまいますね……。
tim = struct('k',0);
tim.k = struct('val',0);
sum=0;
for tim.k=1:5
sum=sum+tim.k;
end
fprintf("%d",sum);
もしお時間ありましたら何かヒント等ご教示いただけますと幸いです。よろしくお願いいたします。

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

카테고리

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

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!