且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何删除数组中的重复项但保持相同的顺序?

更新时间:2022-10-27 21:52:21

这里有一个解决方案,使用一些额外的输入和输出参数 UNIQUE 有:

 >> y = {'d''f''a''g''g''a''w''h'}; %#样本数据
>> [〜,index] = unique(y,'first'); %#捕获索引,忽略实际值
>> y(sort(index))%#索引y与排序索引

ans =

'd''f''a''g''w''h '


I have this cell array in MATLAB:

y = { 'd' 'f' 'a' 'g' 'g' 'a' 'w' 'h'}

I use unique(y) to get rid of the duplicates but it rearranges the strings in alphabetical order:

>> unique(y)

ans =

'a'    'd'    'f'    'g'    'h'    'w'

I want to remove the duplicates but keep the same order. I know I could write a function do do this but was wondering if there was a simpler way using unique to remove duplicates while keeping the same order just with the duplicates removed.

I want it to return this:

>> unique(y)

ans = 

'd'    'f'    'a'    'g'    'w'    'h'

Here's one solution that uses some additional input and output arguments that UNIQUE has:

>> y = { 'd' 'f' 'a' 'g' 'g' 'a' 'w' 'h'};  %# Sample data
>> [~,index] = unique(y,'first');        %# Capture the index, ignore the actual values
>> y(sort(index))                           %# Index y with the sorted index

ans = 

    'd'    'f'    'a'    'g'    'w'    'h'