我有一个字符串向量
x = {'rrr' 'aaa' 'bbb' 'hhh' 'aaa' 'ppp'};
y = unique(x);
此代码返回唯一值,但对它们进行排序。此代码的输出是
y = {'aaa' 'bbb' 'hhh' 'ppp' 'rrr'}
我希望它返回顶部唯一值,但未排序。我想要的输出是
y = {'rrr' 'aaa' 'bbb' 'hhh' 'ppp'}
怎么做?
答案 0 :(得分:4)
您可以使用unique
的第二个输出参数,它返回唯一元素的索引。要以原始顺序显示它们,请在索引原始矢量之前使用索引向量上的sort
函数。
x = {'rrr' 'aaa' 'bbb' 'hhh' 'aaa' 'ppp'};
[y,i] = unique(x);
x(sort(i))
输出:
ans =
'rrr' 'bbb' 'hhh' 'aaa' 'ppp'
答案 1 :(得分:3)
This blog entry explains it very well:
[X, SortVec] = sort(x);
%Remove duplicates
UV(SortVec) = ([1; diff(X)] ~= 0);
%Resort to be back in original order
y = B(UV);
答案 2 :(得分:3)
最新版本的MATLAB,R2012a,为执行exactly what you need的unique
命令提供了其他选项。对于旧版本,@ HMuster和@Dan有很好的答案。