【发布时间】:2013-08-06 04:12:15
【问题描述】:
我有两个字符串 A 和 B 的单元格数组。B 的所有单元格也在 A 中。我想在 A 中找到 B 的单元格的索引。谢谢。
例子:
A=
'aaaa'
'bbbb'
'cccc'
'dddd'
'ffff'
B=
'ffff'
'aaaa'
ans=
5
1
或
ans=
1
5
【问题讨论】:
我有两个字符串 A 和 B 的单元格数组。B 的所有单元格也在 A 中。我想在 A 中找到 B 的单元格的索引。谢谢。
例子:
A=
'aaaa'
'bbbb'
'cccc'
'dddd'
'ffff'
B=
'ffff'
'aaaa'
ans=
5
1
或
ans=
1
5
【问题讨论】:
你可以很简单地做到这一点,使用下面的代码
indices = cell(size(B));
for i = 1:numel(B)
indices{i} = find(strcmpi(A,B(i)));
end
虽然我建议使用ismember 或intersect,但这些解决方案无法处理不区分大小写的解决方案。此外,这些方法不会指示特定索引匹配了多少次,我的解决方案将返回与每次比较匹配的所有索引。
更新
我正在运行的代码来测试它。
A={'aaaa','bbbb','cccc','dddd','ffff','aaaa'};
B={'ffff','aaaa','cccc','qwerty'};
indices = cell(size(B));
for i = 1:numel(B)
indices{i} = find(strcmpi(A,B(i)));
end
indices
返回以下内容
indices =
[5] [1x2 double] [3] [1x0 double]
我看不出你哪里有问题
【讨论】:
ismember 或intersect,这有多简单?
ismember 和 intersect 更适合这个,除非你想找到不区分大小写的匹配项
使用intersect 或ismember
[~, idxInA] = intersect(A,B)
或
LocInA = find(ismember(A,B))
【讨论】:
find(ismember(A, B)) 才能获得指定的答案。
A 中没有重复,ismember 的第二个输出也会起作用:[x, y]=ismember(B,A)