Ben*_*min 100 string matlab cell-array
假设我有单元格数组
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
Run Code Online (Sandbox Code Playgroud)
如果我想找到索引,我该怎么办'KU'?
Vid*_*dar 126
我猜以下代码可以解决这个问题:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ind=find(ismember(strs,'KU'))
Run Code Online (Sandbox Code Playgroud)
这回来了
ans =
2
Run Code Online (Sandbox Code Playgroud)
Pan*_*pta 90
>> strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
>> tic; ind=find(ismember(strs,'KU')); toc
Run Code Online (Sandbox Code Playgroud)
经过时间为0.001976秒.
>> tic; find(strcmp('KU', strs)); toc
Run Code Online (Sandbox Code Playgroud)
经过的时间是0.000014秒.
所以,显然strcmp('KU', strs)需要更少的时间ismember(strs,'KU')
And*_*ein 39
自2011a以来,推荐的方式是:
booleanIndex = strcmp('KU', strs)
Run Code Online (Sandbox Code Playgroud)
如果要获取整数索引(通常不需要),可以使用:
integerIndex = find(booleanIndex);
Run Code Online (Sandbox Code Playgroud)
strfind 不推荐使用,所以尽量不要使用它.
小智 23
我看到每个人都错过了代码中最重要的缺陷:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
Run Code Online (Sandbox Code Playgroud)
应该:
strs = {'HA' 'KU' 'NA' 'MA' 'TATA'}
Run Code Online (Sandbox Code Playgroud)
要么
strs = {'HAKUNA' 'MATATA'}
Run Code Online (Sandbox Code Playgroud)
现在,如果你坚持使用
ind=find(ismember(strs,'KU'))
Run Code Online (Sandbox Code Playgroud)
你不用担心 :).
rob*_*nce 13
对于这种情况,其他答案可能更简单,但为了完整性,我想我会添加使用带有匿名函数的cellfun
indices = find(cellfun(@(x) strcmp(x,'KU'), strs))
Run Code Online (Sandbox Code Playgroud)
它具有以下优点:您可以轻松地使其不区分大小写或在具有结构单元格数组的情况下使用它:
indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))
Run Code Online (Sandbox Code Playgroud)
最短的代码:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
[~,ind]=ismember('KU', strs)
Run Code Online (Sandbox Code Playgroud)
但它只返回第一个位置strs.如果找不到元素那么ind=0.
strcmp和strcmpi函数是最直接的方法.他们搜索数组.
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
166409 次 |
| 最近记录: |