获取单元格数组中字符串出现的索引

时间:2015-04-07 22:27:29

标签: arrays string matlab cell-array

我有一个包含很长字符串列表的单元格数组。大多数字符串都是重复的。我需要单元格数组中字符串实例的索引。

我尝试了以下内容:

[bool,ind] = ismember(string,var);

其中一致返回标量ind,而显然有多个索引,单元格数组中的内容与string匹配。

如何获得指向包含string的单元格数组中位置的索引列表?

3 个答案:

答案 0 :(得分:2)

作为Divakar评论的替代方案,您可以使用strcmp。即使某些单元格不包含字符串,这也可以工作:

>> strcmp('aaa', {'aaa', 'bb', 'aaa', 'c', 25, [1 2 3]})
ans =
     1     0     1     0     0     0

答案 1 :(得分:0)

或者,您可以对每个字符串进行ID,从而具有与输入单元格数组和字符串对应的代表性数字数组。对于 ID ,您可以使用unique,然后像使用数字数组一样使用find。以下是如何实现这一目标的 -

var_ext = [var string]
[~,~,idx] = unique(var_ext)
out = find(idx(1:end-1)==idx(end))

代码细分:

  • var_ext = [var string]:将所有内容(字符串和变量)连接成一个单元格数组,字符串最后一个(最后一个元素)。

  • [~,~,idx] = unique(var_ext):识别该连续单元格数组中的所有内容。

  • find(idx(1:end-1)==idx(end))idx(1:end-1)代表单元格数组元素的数字ID,idx(end)代表string的ID。比较这些ID并使用find来获取匹配的索引,以便为我们提供最终输出。


示例运行 -

输入:

var = {'er','meh','nop','meh','ya','meh'}
string = 'meh'

输出:

out =
     2
     4
     6

答案 2 :(得分:-1)

regexp可以更好地解决这个问题,也很简单。

string  = ['my' 'bat' 'my' 'ball' 'my' 'score']
expression = ['my']

regexp(string,expresssion)
ans = 1 6 12