셀형 배열이 있다고 가정 해 보겠습니다.
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'))