まず、コードのいくつかの問題に対処する必要があります。
セル配列を使用する場合、中かっこ ( {}
) を使用してセル配列から要素を抽出する必要があります。書く代わりに、書くcolour(i)
べきですcolour{i}
。
これは問題ではありませんが、良い習慣の問題です。else
ステートメントの一部を処理する必要がない場合はif
、まったく記述しないでください。
ループ内で配列が大きくならないようにメモリを事前に割り当てます (プログラムの速度が低下します)。具体的には 、ループのresult = cell(size(colour));
前に行を追加します。for
あなたのisequal
論理には欠陥があります。実際には、は 1 つの要素であり、多数でfalse
あるため、常に返されます。colour{1}
type{:}
あなたの例によれば、types
数字とcolours
文字が含まれていますが、どちらも文字列です。2つを比較することに意味はありますか?
さて、あなたの質問に関して、for
ループの実行方法を決めるのはあなた次第です。達成したいことについて言及していないため (正確に何を言うのではなく、何かをどのように達成したいかを尋ねる)、for
必要に応じて、ループがどのように見えるべきかを言うことはできません。ismember
の代わりに使用するつもりだったのかもしれませんisequal
。その場合、修正コードは次のようになります。
result = cell(size(colour));
for i = 1:length(colour)
if ismember(colour{i}, type)
result{i} = type{i};
end
end
または短く、次のように:
result = cell(size(colour));
[found, idx] = ismember(colour, type);
result(found) = type{idx(found)}
詳細を教えていただければ、より役立つように回答を絞り込むことができるかもしれません。