2012-03-22 34 views
10

私はいくつかの文字列を繰り返しますが、Matlabではそうすることができないループを作成したいと思います。Matlabの文字列をforeachループ

for i=1:3 
    if (i==1) 
    b='cow'; 
    elseif (i==2) 
    b='dog'; 
    else 
    b='cat'; 
    end 

    disp(b); 
end 

と結果は次のとおりです:

何働くことはある

cow 
dog 
cat 

しかし、私がしたいことのようになります。よりエレガントなものです:

for i=['cow','dog','cat'] 
    disp (i); 
end 

と与えます同じ結果。

これを行うにはMatlabにオプションがありますか?

はADDITION:

私が使用するだけでなく(dispは一例としてだった)を表示するために、後に文字列としての言葉を必要としています。値がセルとして滞在し、私は、エラーメッセージを取得文字列ではないよう

clear all; 
close all; 
clc; 

global fp_a 
global TEST_TYPE 
global SHADE_METHODE 

for fp_a=11:24 
for shade={'full','fast'} 
    SHADE_METHODE=shade(1); 
    for test={'bunny','city'} 
     TEST_MODE=test(1); 
     fprintf ('fp_a:%d | test: %s | shade: %s',fp_a,TEST_TYPE,SHADE_METHODE); 
     ray_tracing; 
    end 
end 
end 

それは動作しません:私は私の本当のプログラムにセル配列を使用しようとした

を??? ==> fprintfを使用しているエラー 'セル'入力に対して関数が定義されていません。

* - 私は本当に値が正しいことを確認するために使用しています。fprintf

** - ray_tracingは、文字列

+2

追加の問題は単なる構文です。通常の括弧ではなく、セルから文字配列を抽出するには、中括弧 'test {1}'を使う必要があります。 'test(1)'は配列の最初のセルを選択するだけです。 Oliのサンプルコードをもう一度チェックしてください。彼は '{1}'の中括弧を使っていることに注意してください。 (また、回避できれば、グローバルを使用しないでください。) –

+0

あなたは 'SHADE_METHODE = shade(1);の代わりに' SHADE_METHODE = shade {1};を使うべきです – Oli

+0

[MATLABにforeachはありますか?もしそうなら、基になるデータが変更された場合、どのように動作しますか?](http://stackoverflow.com/questions/408080/is-there-a-foreach-in-matlab-if-so-how-does-it-behave -if-the-underlying-data-c) –

答えて

28

それともあなたが行うことができます:

for i={'cow','dog','cat'} 
    disp(i{1}) 
end 

結果:

cow 
dog 
cat 
+6

ニース。 Matlabで書いていることに関して本当に素晴らしい点があっても、本当に恐ろしいものによって相殺されていないのであれば。 – beOn

2

確かの値を使用して私のコードです!文字列を保持するためにセル配列を使用します(通常の配列では、文字列は文字であるとみなされます。すべての文字列が同じ長さであれば動作しますが、それ以外の場合はborkになります)。

opts={'cow','dog','cat'} 
for i=1:length(opts) 
    disp(opts{i}) 
end 
5

あなたの問題は、おそらく、MATLABは、文字列を処理する方法に起因しています。 MATLAB文字列は単なる文字の配列です。 ['cow','dog','cat']を呼び出すと、[]はネストなしで配列を連結するため、'cowdogcat'が形成されます。入れ子の振る舞いが必要な場合は、{}を使用して構築されたセル配列を使用できます。 forは、右側の列を反復処理します。これはあなたが上記のイディオムを使用できることを意味します。オリはすでに解決策を提供していました。このイディオムは、ノーマル配列とセル配列の違いを示す良い方法です。

%Cell array providing the correct solution 
for word = {'cow','dog','cat'} 
    disp(word{1}) %word is bound to a 1x1 cell array. This extracts its contents. 
end 

cow 
dog 
cat 


%Normal array providing weirdness 
for word = ['cow','dog','cat'] %Same as word = 'cowdogcat' 
    disp(word) %No need to extract content 
end 

c 
o 
w 
d 
o 
g 
c 
a 
t 
関連する問題