RemoveDuplicates
This routine removes duplicate entries from the set of integer.
note
RemoveDuplicates will perform reallocation. If you do not want reallocation then use RemoveDuplicates_
Calling example:
CALL RemoveDuplicates(avec)
Without reallocation:
CALL RemoveDuplicates_(avec, tsize, isSorted)
Interface
- ܀ Interface
 - ️܀ See example
 - ↢
 
INTERFACE RemoveDuplicates
  MODULE PURE SUBROUTINE RemoveDuplicates_1a(obj)
    INTEGER(INT8), ALLOCATABLE, INTENT(INOUT) :: obj(:)
  END SUBROUTINE RemoveDuplicates_1a
  MODULE PURE SUBROUTINE RemoveDuplicates_1b(obj)
    INTEGER(INT16), ALLOCATABLE, INTENT(INOUT) :: obj(:)
  END SUBROUTINE RemoveDuplicates_1b
  MODULE PURE SUBROUTINE RemoveDuplicates_1c(obj)
    INTEGER(INT32), ALLOCATABLE, INTENT(INOUT) :: obj(:)
  END SUBROUTINE RemoveDuplicates_1c
  MODULE PURE SUBROUTINE RemoveDuplicates_1d(obj)
    INTEGER(INT64), ALLOCATABLE, INTENT(INOUT) :: obj(:)
  END SUBROUTINE RemoveDuplicates_1d
END INTERFACE RemoveDuplicates
This example shows the usage of RemoveDuplicates method which is defined in IntegerUtility MODULE
program main
  use easifembase
  implicit none
  integer(i4b), allocatable :: intvec( : )
  intvec = [ 5, 4, 4, 4, 3, 3, 2, 2, 1, 1, 1 ]
  call RemoveDuplicates( intvec )
  call display( intvec, "intvec = " )
end program main
Results
intvec = 
---------
    1    
    2    
    3    
    4    
    5
Interface 2
- Interface
 - example
 - ↢ close
 
INTERFACE RemoveDuplicates_
  MODULE PURE SUBROUTINE RemoveDuplicates_1a_(obj, tsize, isSorted)
    INTEGER(INT8), INTENT(INOUT) :: obj(:)
    !! obj(1:tsize) will have unique entries
    LOGICAL(LGT), INTENT(IN) :: isSorted
    !! if obj is sorted then set isSorted to true
    INTEGER(I4B), INTENT(OUT) :: tsize
    !! number of unique entries found
  END SUBROUTINE RemoveDuplicates_1a_
  MODULE PURE SUBROUTINE RemoveDuplicates_1b_(obj, tsize, isSorted)
    INTEGER(INT16), INTENT(INOUT) :: obj(:)
    !! obj(1:tsize) will have unique entries
    LOGICAL(LGT), INTENT(IN) :: isSorted
    !! if obj is sorted then set isSorted to true
    INTEGER(I4B), INTENT(OUT) :: tsize
    !! number of unique entries found
  END SUBROUTINE RemoveDuplicates_1b_
  MODULE PURE SUBROUTINE RemoveDuplicates_1c_(obj, tsize, isSorted)
    INTEGER(INT32), INTENT(INOUT) :: obj(:)
    !! obj(1:tsize) will have unique entries
    LOGICAL(LGT), INTENT(IN) :: isSorted
    !! if obj is sorted then set isSorted to true
    INTEGER(I4B), INTENT(OUT) :: tsize
    !! number of unique entries found
  END SUBROUTINE RemoveDuplicates_1c_
  MODULE PURE SUBROUTINE RemoveDuplicates_1d_(obj, tsize, isSorted)
    INTEGER(INT64), INTENT(INOUT) :: obj(:)
    !! obj(1:tsize) will have unique entries
    LOGICAL(LGT), INTENT(IN) :: isSorted
    !! if obj is sorted then set isSorted to true
    INTEGER(I4B), INTENT(OUT) :: tsize
    !! number of unique entries found
  END SUBROUTINE RemoveDuplicates_1d_
END INTERFACE RemoveDuplicates_
PROGRAM main
USE easifembase
IMPLICIT NONE
INTEGER(i4b), ALLOCATABLE :: intvec(:)
INTEGER(I4B) :: tsize
intvec = [5, 4, 4, 4, 3, 3, 2, 2, 1, 1, 1]
CALL RemoveDuplicates_(intvec, tsize, .FALSE.)
CALL Display(intvec(1:tsize), "intvec = ")
END PROGRAM main