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

43 visualizzazioni (ultimi 30 giorni)
gafakel
gafakel il 1 Giu 2021
Commentato: gafakel il 15 Giu 2021
例えば次のような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 Commento
gafakel
gafakel il 1 Giu 2021
質問の意図がわかりづらくて申し訳ありません。要は下のような状況で、「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にアクセスする必要はないため、紛らわしくなってしまいました。失礼いたしました。

Accedi per commentare.

Risposta accettata

Hernia Baby
Hernia Baby il 1 Giu 2021
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 Commenti
Hernia Baby
Hernia Baby il 1 Giu 2021
返信ありがとうございます。本件理解しました。
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 il 15 Giu 2021
返信が遅くなり大変申し訳ありませんでした。ご回答いただきありがとうございます。

Accedi per commentare.

Più risposte (1)

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

Accedi per commentare.

Categorie

Scopri di più su Logical in Help Center e File Exchange

Prodotti


Release

R2021a

Community Treasure Hunt

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

Start Hunting!