idlastro / Miscellaneous (Non-Astronomy) Procedures: REM_DUP

[Source code]

NAME
REM_DUP
PURPOSE
Function to remove duplicate values from a vector.
CALLING SEQUENCE
result = rem_dup( a, [ flag ] )
INPUTS
a - vector of values from which duplicates are to be found
flag - (optional) if supplied then when duplicates occur,
        the one with the largest value of flag is selected.
        If not supplied the the first occurence of the value
        in a is selected.     Should be a vector with the same
       number of elements as a.
OUTPUT
A vector of subscripts in a is returned.  Each subscript
points to a selected value such that a(rem_dup(a,flag))
has no duplicates.
SIDE EFFECTS
The returned subscripts will sort the values in a in ascending
order with duplicates removed.
EXAMPLES
Remove duplicate values in vector a.
        a = a[ rem_dup(a)]
Remove duplicates in vector WAVE.  When duplicate values
are found, select the one with the largest intensity, INTE.
        sub = rem_dup( wave, inte)
        wave = wave[sub]      
        inte = inte[sub]
NOTES
The UNIQ function in the User's Library uses a faster algorithm,
but has no equivalent of the "flag" parameter.    Also, note that
EM_DUP() gives the index of the *first* equal value found, while
NIQ() gives the index of the *last* equal value found.
MODIFICATION HISTORY
D. Lindler  Mar. 87
11/16/90 JKF ACC - converted to IDL Version 2.
August 1997  -- Changed loop index to type LONG
October 1997 -- Also changed NGOOD index to LONG
pril 2007 - Use faster algorithm when Flag vector not set, W. Landsman
eb 2011 - Remove spurious line W.L.
an 2012 - Call BSORT() to ensure original order maintained for equal
    values