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

43 Ansichten (letzte 30 Tage)
gafakel
gafakel am 1 Jun. 2021
Kommentiert: gafakel am 15 Jun. 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 Kommentar
gafakel
gafakel am 1 Jun. 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にアクセスする必要はないため、紛らわしくなってしまいました。失礼いたしました。

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

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

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Logical finden Sie in Help Center und File Exchange

Produkte


Version

R2021a

Community Treasure Hunt

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

Start Hunting!