2016-09-06 20 views
2

c = {'first', 'second', 'third'}というセル配列が与えられていると、インデックスを使わずにforのループでどのように参照できますか?forループがGNU Octave/Matlabのセル配列の要素を参照する(インデックス変数なし)

c = [1, 2, 3]のために、これは動作しますので、これは、配列のために行うことができます。

for k = c 
    ...   # use k here as an element of c 
endfor 

電池アレイの等価、エレガントな方法は、何ですか? (セル配列は必ずしも配列に変換可能ではないことに注意してください。)

更新:それは実際には正常に機能します(つまり、cがセル配列の場合)。行; c = {'first'; 'second'; 'third'}のように列に格納しても機能しません。ここで

+2

セル配列をループすることができます。これを行うと、繰り返しごとにセル配列の列が得られます。セル配列が行ベクトルの場合、各反復は1要素セル配列を取得します。 – carandraug

+0

@ carandraug説明をありがとう。それは私が見ていたものでしたが、私はそれが定義された行動であるかどうかはわかりませんでした。 – beaker

+0

@beaker forループの定義された動作は、入力の列をループすることです。これはセル配列に固有のものではなく、数値配列でも同じです。たとえば、 'for x =(1:5) '、disp(size(x)); endforは1回だけ繰り返され、xは全体の1:5列として繰り返されます。 – carandraug

答えて

2

は、オプションのカップルです:

cの個々の要素が配列に変換可能であれば、あなたはループ変数としてインデックスを使用することができます。

for k = 1:numel(c) 
    disp(c{k}); 
end 

first 
second 
third 

このオプションは何に最も近いですcellfunとなります。 (cellfunは完全forループを交換する別のオプションになります。)

要素が配列に変換可能でない(あるいはあなたはそれを別の方法をしたい)場合は、ループインデックスとしてcを使用してつかむことができますループ内のコンテンツ:

for k = c 
    disp(k{}); 
end 

first 
second 
third 

これは、あなたの例で行うことの中で最も直接的な翻訳です。

+0

2番目のアプローチでは間違いがありますが、ループはセル配列の長さにもかかわらず、1回しか繰り返しません。これを試してください: 't = 0; k = cの場合; disp(k {}); ++ t、end' – nightcod3r

+0

@ nightcod3r実際には、私は3回繰り返して、 't'の最終値は3です。私はあなたの質問に正確に' c'を使います。何か違いがあります。 – beaker

+0

あなたは正しいです。私は 'c = {' first '; '秒'; '第3の'} 'は、実際に大きな違いを生み出します。これは答えを些細なものにします(質問の文にも含まれます)。しかし、誰かが必要とする有用な情報と同様に、私はそれを更新しておきます。 – nightcod3r

関連する問題