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

56 vues (au cours des 30 derniers jours)
gafakel
gafakel le 1 Juin 2021
Commenté : gafakel le 15 Juin 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 commentaire
gafakel
gafakel le 1 Juin 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にアクセスする必要はないため、紛らわしくなってしまいました。失礼いたしました。

Connectez-vous pour commenter.

Réponse acceptée

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

Connectez-vous pour commenter.

Plus de réponses (1)

Atsushi Ueno
Atsushi Ueno le 1 Juin 2021
time = struct('k',0);
time.k = struct('val',0);
のように構造体を定義すれば動作します。
  2 commentaires
Atsushi Ueno
Atsushi Ueno le 1 Juin 2021
申し訳ありません勘違いがありました。上記の定義が無くても動作します。
gafakel
gafakel le 1 Juin 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);
もしお時間ありましたら何かヒント等ご教示いただけますと幸いです。よろしくお願いいたします。

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Produits


Version

R2021a

Community Treasure Hunt

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

Start Hunting!