79 lines
1.5 KiB
Go
79 lines
1.5 KiB
Go
|
package collection
|
|||
|
|
|||
|
var empty struct{}
|
|||
|
|
|||
|
// Set est une collection de valeurs uniques.
|
|||
|
type Set[T comparable] map[T]struct{}
|
|||
|
|
|||
|
// Add ajoute les valeurs en entrée dans le set et retourne le set lui-même.
|
|||
|
func (s Set[T]) Add(in ...T) Set[T] {
|
|||
|
for _, e := range in {
|
|||
|
s[e] = empty
|
|||
|
}
|
|||
|
|
|||
|
return s
|
|||
|
}
|
|||
|
|
|||
|
// Del supprime les valeurs données en entrées du set et retourne le set lui-même.
|
|||
|
func (s Set[T]) Del(in ...T) Set[T] {
|
|||
|
for _, e := range in {
|
|||
|
delete(s, e)
|
|||
|
}
|
|||
|
|
|||
|
return s
|
|||
|
}
|
|||
|
|
|||
|
// Contains retourne vrai si le set contient la valeur d'entrée.
|
|||
|
func (s Set[T]) Contains(in T) (out bool) {
|
|||
|
_, out = s[in]
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// ContainsOneOf retourne vrai si le set contient au moins une des valeurs d’entrée.
|
|||
|
func (s Set[T]) ContainsOneOf(in ...T) bool {
|
|||
|
for _, e := range in {
|
|||
|
if s.Contains(e) {
|
|||
|
return true
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return false
|
|||
|
}
|
|||
|
|
|||
|
// ContainsAll retourne vrai si le set contient toutes les valeurs d’entrée.
|
|||
|
func (s Set[T]) ContainsAll(in ...T) bool {
|
|||
|
for _, e := range in {
|
|||
|
if !s.Contains(e) {
|
|||
|
return false
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return true
|
|||
|
}
|
|||
|
|
|||
|
// Len retourne le nombre d’éléments du set.
|
|||
|
func (s Set[T]) Len() int {
|
|||
|
return len(s)
|
|||
|
}
|
|||
|
|
|||
|
// ToSlice convertit un set en slice d'éléments de même type.
|
|||
|
func (s Set[T]) ToSlice() (out []T) {
|
|||
|
out = make([]T, len(s))
|
|||
|
i := 0
|
|||
|
for e := range s {
|
|||
|
out[i] = e
|
|||
|
i++
|
|||
|
}
|
|||
|
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// NewSet retourne un set initialisé avec les valeurs d'entrée.
|
|||
|
func NewSet[T comparable](in ...T) (out Set[T]) {
|
|||
|
out = make(Set[T])
|
|||
|
out.Add(in...)
|
|||
|
|
|||
|
return
|
|||
|
}
|