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

时间:2011-11-09 06:47:52

标签: string matlab cell-array

假设我有单元格数组

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

如果我想找到'KU'的索引?

,我该怎么办?

8 个答案:

答案 0 :(得分:125)

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

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ind=find(ismember(strs,'KU'))

返回

ans = 
     2

答案 1 :(得分:90)

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

少得多

答案 2 :(得分:39)

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

booleanIndex = strcmp('KU', strs)

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

integerIndex = find(booleanIndex);

strfind已弃用,因此请尽量不要使用它。

答案 3 :(得分:23)

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

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

应该是:

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

strs = {'HAKUNA' 'MATATA'}

现在,如果你坚持使用

ind=find(ismember(strs,'KU'))

你将no worries:)。

答案 4 :(得分:13)

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

indices = find(cellfun(@(x) strcmp(x,'KU'), strs))

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

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

答案 5 :(得分:6)

最短的代码:

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

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

答案 6 :(得分:5)

strcmp和strcmpi函数是执行此操作的最直接方法。他们搜索数组。

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

答案 7 :(得分:-2)

你试过

吗?
indices = Find(strs, 'KU')

请参阅link

或者,

indices = strfind(strs, 'KU');
如果我没弄错的话,

也应该有效。