在Octave中,我有这个单元格数组:
y = { 'hello' 'world' 'a' 'world' 'g' 'I' 'w' 'hi'};
我需要能够删除元素的重复项。因此,例如,我想删除'world'
的副本,这应该是输出:
ans =
{
[1,1] = hello
[1,2] = a
[1,3] = g
[1,4] = I
[1,5] = w
[1,6] = hi
}
除了通常的循环直到n次,Octave中是否有一个函数可以做到这一点?
我一直在寻找办法,但一无所获。从我所看到的情况来看,unique
不会这样做,因为它会删除所有重复项。
答案 0 :(得分:1)
如果您要从示例中显示的单元格数组中删除所有出现的字符串,则只需使用strcmp
。
x = y(~strcmp(y, 'world'));
%// {
%// [1,1] = hello
%// [1,2] = a
%// [1,3] = g
%// [1,4] = I
%// [1,5] = w
%// [1,6] = hi
%// }
如果您想要一次性删除多对重复项,可以轻松调整这一点。{/ 1}}。
ismember
如果您想删除除第一次出现的字符串以外的所有内容,您可以执行以下操作。
y = {'a', 'a', 'b', 'b', 'c', 'c'};
x = y(~ismember(y, {'a', 'b'});
答案 1 :(得分:1)
如果您想自动删除多次出现的项目,请使用此项:
y = { 'hello' 'world' 'a' 'world' 'g' 'I' 'w' 'hi'};
[Y, ~, J] = unique (y);
cnt = accumarray (J(:), 1);
Y(cnt == 1)
ans =
{
[1,1] = I
[1,2] = a
[1,3] = g
[1,4] = hello
[1,5] = hi
[1,6] = w
}
cnt计算每个字符串的出现次数,因此Y(cnt == 1)只包含恰好出现一次的字符串。