mirror of
https://github.com/charlienet/go-mixed.git
synced 2025-07-18 00:22:41 +08:00
36 lines
585 B
Go
36 lines
585 B
Go
package generics
|
|
|
|
type Array[T comparable] struct {
|
|
data []T
|
|
length int
|
|
}
|
|
|
|
func NewArray[T comparable](values ...T) *Array[T] {
|
|
return &Array[T]{data: values, length: len(values)}
|
|
}
|
|
|
|
func (a *Array[T]) Distinct(keepSorted bool) *Array[T] {
|
|
set := NewHashSet(a.data...)
|
|
if set.Size() == a.length {
|
|
return a
|
|
}
|
|
|
|
if !keepSorted {
|
|
return NewArray(set.Values()...)
|
|
}
|
|
|
|
ret := make([]T, 0, len(set))
|
|
for _, v := range a.data {
|
|
if set.Contain(v) {
|
|
ret = append(ret, v)
|
|
set.Remove(v)
|
|
}
|
|
}
|
|
|
|
return NewArray(ret...)
|
|
}
|
|
|
|
func (a *Array[T]) ToList() []T {
|
|
return a.data
|
|
}
|