Yanıtlar:
Sanırım aşağıdaki kod hile yapabilir:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ind=find(ismember(strs,'KU'))
Bu geri dönüyor
ans =
2
>> strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
>> tic; ind=find(ismember(strs,'KU')); toc
Geçen süre 0.001976 saniyedir.
>> tic; find(strcmp('KU', strs)); toc
Geçen süre 0.000014 saniyedir.
Yani, açıkça strcmp('KU', strs)
daha az zaman alıyorismember(strs,'KU')
2011a'dan beri önerilen yol şudur:
booleanIndex = strcmp('KU', strs)
Eğer tamsayı indeksini almak istiyorsanız (ki genellikle ihtiyacınız yoktur), şunu kullanabilirsiniz:
integerIndex = find(booleanIndex);
strfind
kullanımdan kaldırıldı, bu yüzden onu kullanmamaya çalışın.
Kodunuzdaki en önemli kusuru herkesin gözden kaçırdığını görüyorum:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
olmalı:
strs = {'HA' 'KU' 'NA' 'MA' 'TATA'}
veya
strs = {'HAKUNA' 'MATATA'}
Şimdi kullanmaya devam edersen
ind=find(ismember(strs,'KU'))
Endişelenmenize gerek yok :).
Diğer cevaplar muhtemelen bu durum için daha basittir, ancak bütünlük için anonim bir işlevle cellfun kullanımını ekleyeceğimi düşündüm.
indices = find(cellfun(@(x) strcmp(x,'KU'), strs))
Bu, onu kolayca büyük / küçük harf duyarlı hale getirme veya hücre yapı dizisine sahip olduğunuz durumlarda kullanma avantajına sahiptir:
indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))
En kısa kod:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
[~,ind]=ismember('KU', strs)
Ancak içinde yalnızca ilk konumu döndürür strs
. Öğe bulunmazsa o zaman ind=0
.
Strcmp ve strcmpi işlevleri bunu yapmanın en doğrudan yoludur. Diziler arasında arama yaparlar.
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))
denedin mi
indices = Find(strs, 'KU')
bağlantıya bakın
alternatif olarak
indices = strfind(strs, 'KU');
yanılmıyorsam da çalışmalı.