【发布时间】:2011-12-25 01:41:02
【问题描述】:
假设我有元胞数组
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
如果要查找'KU'的索引该怎么办?
【问题讨论】:
-
请注意,当前的最佳答案已经过时了。确保同时检查this answer。
标签: string matlab cell-array
假设我有元胞数组
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
如果要查找'KU'的索引该怎么办?
【问题讨论】:
标签: string matlab cell-array
我猜下面的代码可以解决问题:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ind=find(ismember(strs,'KU'))
返回
ans =
2
【讨论】:
最短的代码:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
[~,ind]=ismember('KU', strs)
但它只返回strs 中的第一个位置。如果未找到元素,则ind=0。
【讨论】:
我发现每个人都忽略了您代码中最重要的缺陷:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
应该是:
strs = {'HA' 'KU' 'NA' 'MA' 'TATA'}
或
strs = {'HAKUNA' 'MATATA'}
现在如果你坚持使用
ind=find(ismember(strs,'KU'))
您将拥有no worries :)。
【讨论】:
>> 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 已弃用,因此请尽量不要使用它。
【讨论】:
strcmp 和 strcmpi 函数是最直接的方法。他们通过数组搜索。
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))
【讨论】:
对于这种情况,其他答案可能更简单,但为了完整起见,我想我会在匿名函数中添加 cellfun 的使用
indices = find(cellfun(@(x) strcmp(x,'KU'), strs))
它的优点是您可以轻松地使其不区分大小写或在具有结构单元数组的情况下使用它:
indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))
【讨论】:
【讨论】: