Jawaban:
Saya kira kode berikut bisa melakukan triknya:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ind=find(ismember(strs,'KU'))
Ini kembali
ans =
2
>> strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
>> tic; ind=find(ismember(strs,'KU')); toc
Waktu yang berlalu adalah 0,001976 detik.
>> tic; find(strcmp('KU', strs)); toc
Waktu yang berlalu adalah 0,000014 detik.
JADI, jelas strcmp('KU', strs)
membutuhkan waktu yang jauh lebih sedikit daripadaismember(strs,'KU')
Sejak 2011a, cara yang direkomendasikan adalah:
booleanIndex = strcmp('KU', strs)
Jika Anda ingin mendapatkan indeks integer (yang seringkali tidak Anda perlukan), Anda dapat menggunakan:
integerIndex = find(booleanIndex);
strfind
sudah usang, jadi cobalah untuk tidak menggunakannya.
Saya melihat bahwa semua orang melewatkan kesalahan terpenting dalam kode Anda:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
seharusnya:
strs = {'HA' 'KU' 'NA' 'MA' 'TATA'}
atau
strs = {'HAKUNA' 'MATATA'}
Sekarang jika Anda tetap menggunakan
ind=find(ismember(strs,'KU'))
Anda tidak akan khawatir :).
Jawaban lain mungkin lebih sederhana untuk kasus ini, tetapi untuk kelengkapan saya pikir saya akan menambahkan penggunaan cellfun dengan fungsi anonim
indices = find(cellfun(@(x) strcmp(x,'KU'), strs))
yang memiliki keuntungan bahwa Anda dapat dengan mudah membuatnya tidak peka huruf besar / kecil atau menggunakannya dalam kasus di mana Anda memiliki susunan sel struktur:
indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))
Kode terpendek:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
[~,ind]=ismember('KU', strs)
Tapi itu hanya mengembalikan posisi pertama strs
. Jika elemen tidak ditemukan maka ind=0
.
Fungsi strcmp dan strcmpi adalah cara paling langsung untuk melakukan ini. Mereka mencari melalui array.
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))
apakah kamu sudah mencoba
indices = Find(strs, 'KU')
lihat link
kalau tidak,
indices = strfind(strs, 'KU');
juga harus bekerja jika saya tidak salah.