107

假设我有单元格数组

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

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

4

8 回答 8

130

我想下面的代码可以解决问题:

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

这返回

ans = 
     2
于 2011-11-09T07:04:52.553 回答
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')

于 2013-09-06T04:22:51.613 回答
40

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

booleanIndex = strcmp('KU', strs)

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

integerIndex = find(booleanIndex);

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

于 2012-02-24T15:50:26.430 回答
25

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

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

应该:

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

或者

strs = {'HAKUNA' 'MATATA'}

现在如果你坚持使用

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

不用担心:)。

于 2013-11-06T01:59:06.403 回答
13

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

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

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

indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))
于 2011-11-09T07:48:51.230 回答
6

最短的代码:

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

但它只返回strs. 如果未找到元素,则ind=0

于 2014-09-16T20:08:00.860 回答
5

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

strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))
于 2012-02-24T15:15:59.047 回答
-2

你试过了吗

indices = Find(strs, 'KU')

链接

或者,

indices = strfind(strs, 'KU');

如果我没记错的话也应该工作。

于 2011-11-09T06:57:35.173 回答