mirror of
https://github.com/Buriburizaem0n/nezha_domains.git
synced 2026-02-04 04:30:05 +00:00
refactor: improve performance
This commit is contained in:
@@ -152,3 +152,15 @@ func MapValuesToSlice[Map ~map[K]V, K comparable, V any](m Map) []V {
|
||||
s := make([]V, 0, len(m))
|
||||
return slices.AppendSeq(s, maps.Values(m))
|
||||
}
|
||||
|
||||
func Unique[T comparable](s []T) []T {
|
||||
m := make(map[T]struct{})
|
||||
ret := make([]T, 0, len(s))
|
||||
for _, v := range s {
|
||||
if _, ok := m[v]; !ok {
|
||||
m[v] = struct{}{}
|
||||
ret = append(ret, v)
|
||||
}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
@@ -134,3 +134,49 @@ func TestBinaryToIPString(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestUnique(t *testing.T) {
|
||||
cases := []struct {
|
||||
input []string
|
||||
output []string
|
||||
}{
|
||||
{
|
||||
input: []string{"a", "b", "c", "a", "b", "c"},
|
||||
output: []string{"a", "b", "c"},
|
||||
},
|
||||
{
|
||||
input: []string{"a", "b", "c"},
|
||||
output: []string{"a", "b", "c"},
|
||||
},
|
||||
{
|
||||
input: []string{"a", "a", "a"},
|
||||
output: []string{"a"},
|
||||
},
|
||||
{
|
||||
input: []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j"},
|
||||
output: []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j"},
|
||||
},
|
||||
{
|
||||
input: []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "a"},
|
||||
output: []string{"a", "b", "c", "d", "e", "f", "g", "h", "i"},
|
||||
},
|
||||
{
|
||||
input: []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "a", "b", "c", "d", "e", "f", "g", "h", "i"},
|
||||
output: []string{"a", "b", "c", "d", "e", "f", "g", "h", "i"},
|
||||
},
|
||||
{
|
||||
input: []string{},
|
||||
output: []string{},
|
||||
},
|
||||
{
|
||||
input: []string{"a"},
|
||||
output: []string{"a"},
|
||||
},
|
||||
}
|
||||
|
||||
for _, c := range cases {
|
||||
if !reflect.DeepEqual(Unique(c.input), c.output) {
|
||||
t.Fatalf("Expected %v, but got %v", c.output, Unique(c.input))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user