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

58 ビュー (過去 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 Center および File ExchangeMatrix Indexing についてさらに検索

製品


リリース

R2021a

Community Treasure Hunt

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

Start Hunting!