查找单元格数组中出现的所有字符串(本身是结构的一部分)

问题描述 投票:0回答:1

我有以下结构

dataDens = 

     dens: [1x172 double]
    level: {1x172 cell}
     raga: {1x172 cell}

dataDens.raga包含的内容(为简单起见,减少下面的列数)

Columns 1 through 3
    'Multani'    'Tori'    'Tori' 

我想找到'Tori'出现的指数(即上面例子的[2 3])。但是,我尝试过的所有命令(如下所示)都会产生错误,或者返回空白输出。我认为这可能只是在某处添加/删除花括号或使用某些转换;但我在我的智慧结束,并希望有人可以帮助澄清

indices = find(strcmp([dataDens.raga{:}], {'Tori'}))
indices = ismember('Tori', dataDens.raga)
[if,where] = ismember('Tori', dataDens.raga)
matlab
1个回答
1
投票

这个问题确实与括号有关。 [dataDens.raga{:}]将导致字符数组的连接,如下所示:

>> [dataDens.raga{:}]
ans =
    'MultaniToriTori'

使用strcmp将其与'Tori'进行比较将导致错误,因为没有完全匹配。然而,您可以使用strcmp比较整个单元格,然后返回一个布尔数组,其中find可用于获取true条目的索引:

indices = find(strcmp(data, {'Tori'}))

或者,ismember也可以,但使用ismember('Tori', dataDens.raga)你正在检查'Tori'是否在dataDens.raga,而不是相反。将此更改为

ismember(dataDens.raga, 'Tori')

将再次给你一个布尔数组,find将获得你正在寻找的索引。

© www.soinside.com 2019 - 2024. All rights reserved.