如何在MATLAB中搜索单元格数组中的字符串?

Ben*_*min 100 string matlab cell-array

假设我有单元格数组

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
Run Code Online (Sandbox Code Playgroud)

如果我想找到索引,我该怎么办'KU'

Vid*_*dar 126

我猜以下代码可以解决这个问题:

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ind=find(ismember(strs,'KU'))
Run Code Online (Sandbox Code Playgroud)

这回来了

ans = 
     2
Run Code Online (Sandbox Code Playgroud)

  • 请记住,这种通用解决方案很好,因为它适用于多种数据类型,但它只适用于完全匹配.如果您需要不区分大小写的匹配项,请参阅http://stackoverflow.com/a/9433112/44737.如果您需要匹配更复杂的内容(如正则表达式或结构中的字段),请参阅http://stackoverflow.com/a/8061808/44737 (10认同)

Pan*_*pta 90

>> strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
>> tic; ind=find(ismember(strs,'KU')); toc
Run Code Online (Sandbox Code Playgroud)

经过时间为0.001976秒.

>> tic; find(strcmp('KU', strs)); toc
Run Code Online (Sandbox Code Playgroud)

经过的时间是0.000014秒.

所以,显然strcmp('KU', strs)需要更少的时间ismember(strs,'KU')

  • 大!你的解决方案应该是最好的! (5认同)

And*_*ein 39

自2011a以来,推荐的方式是:

booleanIndex = strcmp('KU', strs)
Run Code Online (Sandbox Code Playgroud)

如果要获取整数索引(通常不需要),可以使用:

integerIndex = find(booleanIndex);
Run Code Online (Sandbox Code Playgroud)

strfind 不推荐使用,所以尽量不要使用它.


小智 23

我看到每个人都错过了代码中最重要的缺陷:

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
Run Code Online (Sandbox Code Playgroud)

应该:

strs = {'HA' 'KU' 'NA' 'MA' 'TATA'} 
Run Code Online (Sandbox Code Playgroud)

要么

strs = {'HAKUNA' 'MATATA'}
Run Code Online (Sandbox Code Playgroud)

现在,如果你坚持使用

ind=find(ismember(strs,'KU'))
Run Code Online (Sandbox Code Playgroud)

不用担心 :).


rob*_*nce 13

对于这种情况,其他答案可能更简单,但为了完整性,我想我会添加使用带有匿名函数的cellfun

indices = find(cellfun(@(x) strcmp(x,'KU'), strs))
Run Code Online (Sandbox Code Playgroud)

它具有以下优点:您可以轻松地使其不区分大小写或在具有结构单元格数组的情况下使用它:

indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))
Run Code Online (Sandbox Code Playgroud)


Max*_*lov 6

最短的代码:

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
[~,ind]=ismember('KU', strs)
Run Code Online (Sandbox Code Playgroud)

但它只返回第一个位置strs.如果找不到元素那么ind=0.


And*_*nke 5

strcmp和strcmpi函数是最直接的方法.他们搜索数组.

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))
Run Code Online (Sandbox Code Playgroud)