迭代器示例集合增加切片批量添加功能

This commit is contained in:
fantasticbin 2024-11-13 15:21:50 +08:00
parent 5febea0733
commit 9c8037fc96
2 changed files with 15 additions and 5 deletions

View File

@ -2,6 +2,7 @@ package iterator
import ( import (
"iter" "iter"
"slices"
) )
// Set 集合 // Set 集合
@ -23,6 +24,18 @@ func NewOrderedSet[T comparable]() *OrderedSet[T] {
return &OrderedSet[T]{make([]T, 0), NewSet[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) { func (s Set[T]) Add(e T) {
s.m[e] = struct{}{} 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] { func (s *OrderedSet[T]) FilterMap(fn func(T) bool) iter.Seq[T] {
return func(yield func(T) bool) { return func(yield func(T) bool) {
// 迭代有序切片 // 迭代有序切片
for _, v := range s.ordered { for v := range slices.Values(s.ordered) {
if !fn(v) { if !fn(v) {
continue continue
} }

View File

@ -3,7 +3,6 @@ package iterator
import ( import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"iter" "iter"
"slices"
"testing" "testing"
) )
@ -15,11 +14,9 @@ func TestSet(t *testing.T) {
"gopher", "gopher",
"javaer", "javaer",
} }
s.FromSlice(list)
var pull, push, filter []string var pull, push, filter []string
expected := list[:3] expected := list[:3]
for v := range slices.Values(list) {
s.Add(v)
}
// 只推 // 只推
for v := range s.All() { for v := range s.All() {