如何在MATLAB中的单元格数组中searchstring?

比方说,我有单元arrays

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'} 

如果我想find'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秒。

所以, strcmp('KU', strs)ismember(strs,'KU')要less得多

2011年以来,推荐的方法是:

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

其优点是可以轻松地使其不区分大小写,或者在具有单元arrays结构的情况下使用它:

 indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs)) 

strcmp和strcmpi函数是最直接的方法。 他们通过数组search。

 strs = {'HA' 'KU' 'LA' 'MA' 'TATA'} ix = find(strcmp(strs, 'KU')) 

最短的代码:

 strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}; [~,ind]=ismember('KU', strs) 

但是它只返回strs第一个位置。 如果找不到元素,则ind=0

你试过了吗

 indices = Find(strs, 'KU') 

看链接

或者,

 indices = strfind(strs, 'KU'); 

如果我没有弄错,也应该工作。

Interesting Posts