diff --git a/iterator/set.go b/iterator/set.go index 99799ff..9280342 100644 --- a/iterator/set.go +++ b/iterator/set.go @@ -2,6 +2,7 @@ package iterator import ( "iter" + "slices" ) // Set 集合 @@ -23,6 +24,18 @@ func NewOrderedSet[T comparable]() *OrderedSet[T] { return &OrderedSet[T]{make([]T, 0), NewSet[T]()} } +func (s Set[T]) FromSlice(data []T) { + for v := range slices.Values(data) { + s.Add(v) + } +} + +func (s *OrderedSet[T]) FromSlice(data []T) { + for v := range slices.Values(data) { + s.Add(v) + } +} + func (s Set[T]) Add(e T) { s.m[e] = struct{}{} } @@ -90,7 +103,7 @@ func (s Set[T]) FilterMap(fn func(T) bool) iter.Seq[T] { func (s *OrderedSet[T]) FilterMap(fn func(T) bool) iter.Seq[T] { return func(yield func(T) bool) { // 迭代有序切片 - for _, v := range s.ordered { + for v := range slices.Values(s.ordered) { if !fn(v) { continue } diff --git a/iterator/set_test.go b/iterator/set_test.go index cfd3fad..4eb9892 100644 --- a/iterator/set_test.go +++ b/iterator/set_test.go @@ -3,7 +3,6 @@ package iterator import ( "github.com/stretchr/testify/assert" "iter" - "slices" "testing" ) @@ -15,11 +14,9 @@ func TestSet(t *testing.T) { "gopher", "javaer", } + s.FromSlice(list) var pull, push, filter []string expected := list[:3] - for v := range slices.Values(list) { - s.Add(v) - } // 只推 for v := range s.All() {