[string] MATLAB에서 셀형 배열의 문자열을 검색하는 방법은 무엇입니까?

셀형 배열이 있다고 가정 해 보겠습니다.

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'))