假设我有一个单元格数组
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
如果我想查找'KU'
的索引,应该怎么做?
假设我有一个单元格数组
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')
少得多。
自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))
这种方法的优势在于您可以轻松地将其忽略大小写或在具有单元结构数组的情况下使用:
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'))