私はセル配列を持っているとしましょう
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
'KU'
のインデックスを見つけたい場合はどうすればよいですか?
次のコードでうまくいくと思います:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ind=find(ismember(strs,'KU'))
これは戻ります
ans =
2
>> strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
>> tic; ind=find(ismember(strs,'KU')); toc
経過時間は0.001976秒です。
>> tic; find(strcmp('KU', strs)); toc
経過時間は0.000014秒です。
SO、明らかにstrcmp('KU', strs)
はismember(strs,'KU')
よりもはるかに短い時間で済みます
2011a以降、推奨される方法は次のとおりです。
booleanIndex = strcmp('KU', strs)
整数インデックス(たいていは必要ない)を取得したい場合は、次を使用できます。
integerIndex = find(booleanIndex);
strfind
は非推奨です。使用しないようにしてください。
私は誰もがあなたのコードの最も重要な欠陥を見逃しているのを見ています:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
する必要があります:
strs = {'HA' 'KU' 'NA' 'MA' 'TATA'}
または
strs = {'HAKUNA' 'MATATA'}
今、あなたが使用に固執する場合
ind=find(ismember(strs,'KU'))
心配なし :)になります。
この場合、他の答えはおそらく簡単ですが、完全を期すために、無名関数でcellfunの使用を追加すると思いました
indices = find(cellfun(@(x) strcmp(x,'KU'), strs))
これには、構造体のセル配列がある場合に、大文字と小文字を区別しないようにするか、簡単に使用できるという利点があります。
indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))
最も短いコード:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
[~,ind]=ismember('KU', strs)
ただし、strs
の最初の位置のみを返します。要素が見つからない場合は、ind=0
。
Strcmpおよびstrcmpi関数は、これを行う最も直接的な方法です。配列を検索します。
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))