如何在MATLAB中的单元格数组中searchstring?
比方说,我有单元arrays
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
如果我想find'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')
要less得多
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))
其优点是可以轻松地使其不区分大小写,或者在具有单元arrays结构的情况下使用它:
indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))
strcmp和strcmpi函数是最直接的方法。 他们通过数组search。
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'} ix = find(strcmp(strs, 'KU'))
最短的代码:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}; [~,ind]=ismember('KU', strs)
但是它只返回strs
第一个位置。 如果找不到元素,则ind=0
。
你试过了吗
indices = Find(strs, 'KU')
看链接
或者,
indices = strfind(strs, 'KU');
如果我没有弄错,也应该工作。