假设我有单元格数组
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
如果我想找到'KU'
的索引?
答案 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)