我有两个字符串数组,我想找到第一个数组中每个字符串在第二个数组中的位置,所以我尝试了这个:
for i = 1:length(array1);
cmp(i) = strfind(array2,array1(i,:));
end
这似乎不起作用,我收到错误:"必须是一行"。
答案 0 :(得分:1)
为了完整起见,字符串数组只不过是一个字符矩阵。这可能非常严格,因为所有字符串必须具有相同数量的元素。这就是@ neerad29解决方案的全部内容。
但是,您可能需要考虑字符串的单元格数组,而不是字符串数组,其中每个字符串都可以任意长。我将报告相同的@ neerad29解决方案,但使用单元阵列。代码看起来也会更聪明一些:
a = {'abcd'; 'efgh'; 'ijkl'};
b = {'efgh'; 'abcd'; 'ijkl'};
pos=[];
for i=1:size(a,1)
AreStringFound=cellfun(@(x) strcmp(x,a(i,:)),b);
pos=[pos find(AreStringFound)];
end
但可能需要一些额外的词语:
pos
将包含索引2 1 3
,就像@ neerad29的解决方案cellfun()
是一个函数,它将给定函数(在我们的例子中为strcmp()
)应用于给定单元格数组的每个单元格。 x
将是数组b
中的通用单元格,将与a(i,:)
进行比较cellfun()
在第AreStringFound
个true
中找到j
,a(i,:)
将返回一个布局数组b
)find()
1}}和j
确实会返回b
的值,这是我们正确的索引。如果在npm install
中的多个位置找到给定字符串,则此代码更加健壮。答案 1 :(得分:0)
strfind
将无效,因为它用于在另一个字符串中查找字符串,而不是在字符串数组中。那么,这个怎么样:
a = ['abcd'; 'efgh'; 'ijkl'];
b = ['efgh'; 'abcd'; 'ijkl'];
cmp = zeros(1, size(a, 1));
for i = 1:size(a, 1)
for j = 1:size(b, 1)
if strcmp(a(i, :), b(j, :))
cmp(i) = j;
break;
end
end
end
cmp =
2 1 3