我有一个包含很长字符串列表的单元格数组。大多数字符串都是重复的。我需要单元格数组中字符串实例的索引。
我尝试了以下内容:
[bool,ind] = ismember(string,var);
其中一致返回标量ind
,而显然有多个索引,单元格数组中的内容与string
匹配。
如何获得指向包含string
的单元格数组中位置的索引列表?
答案 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