假设我有单元格数组
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 秒。
所以,显然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'))