增加map集合示例
This commit is contained in:
parent
9fce7acead
commit
b6979d0594
36
map_set/map.go
Normal file
36
map_set/map.go
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
package map_set
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sort"
|
||||||
|
|
||||||
|
"golang.org/x/exp/constraints"
|
||||||
|
)
|
||||||
|
|
||||||
|
func New[T comparable](slice ...T) map[T]struct{} {
|
||||||
|
mapSet := make(map[T]struct{}, len(slice))
|
||||||
|
for _, element := range slice {
|
||||||
|
mapSet[element] = struct{}{}
|
||||||
|
}
|
||||||
|
return mapSet
|
||||||
|
}
|
||||||
|
|
||||||
|
func In[T comparable](needle T, haystack map[T]struct{}) bool {
|
||||||
|
_, exists := haystack[needle]
|
||||||
|
return exists
|
||||||
|
}
|
||||||
|
|
||||||
|
func Keys[T comparable](mapSet map[T]struct{}) []T {
|
||||||
|
slice := make([]T, 0, len(mapSet))
|
||||||
|
for k := range mapSet {
|
||||||
|
slice = append(slice, k)
|
||||||
|
}
|
||||||
|
return slice
|
||||||
|
}
|
||||||
|
|
||||||
|
func Sort[T constraints.Ordered](mapSet map[T]struct{}) []T {
|
||||||
|
keys := Keys(mapSet)
|
||||||
|
sort.Slice(keys, func(i, j int) bool {
|
||||||
|
return keys[i] < keys[j]
|
||||||
|
})
|
||||||
|
return keys
|
||||||
|
}
|
16
map_set/map_test.go
Normal file
16
map_set/map_test.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package map_set
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func TestMapSet(t *testing.T) {
|
||||||
|
mapSet := New(2, 3, 1, 5, 4)
|
||||||
|
res := In(3, mapSet)
|
||||||
|
if !res {
|
||||||
|
t.Error("In() error")
|
||||||
|
}
|
||||||
|
|
||||||
|
slice := Sort(mapSet)
|
||||||
|
if slice[0] != 1 || slice[1] != 2 || slice[2] != 3 || slice[3] != 4 || slice[4] != 5 {
|
||||||
|
t.Error("Sort() error")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user