From: qydysky Date: Mon, 17 Jun 2024 11:42:29 +0000 (+0000) Subject: slice.Del X-Git-Tag: v0.28.20240617114802 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=d85e699a0626ae236a92b995b4f911ddd3cf1424;p=part%2F.git slice.Del --- diff --git a/slice/Slice.go b/slice/Slice.go index 78c4589..708efbf 100644 --- a/slice/Slice.go +++ b/slice/Slice.go @@ -229,3 +229,12 @@ func Resize[S ~[]T, T any](s *S, size int) { *s = append((*s)[:cap(*s)], make([]T, size-cap(*s))...) } } + +func Del[S ~[]T, T any](s *S, f func(t *T) (del bool)) { + for i := 0; i < len(*s); i++ { + if f(&(*s)[i]) { + *s = append((*s)[:i], (*s)[i+1:]...) + i-=1 + } + } +} diff --git a/slice/Slice_test.go b/slice/Slice_test.go index bb33187..f9903c4 100644 --- a/slice/Slice_test.go +++ b/slice/Slice_test.go @@ -6,6 +6,17 @@ import ( "unsafe" ) +func TestDel(t *testing.T) { + var s = []int{1, 2, 3, 4, 4, 6, 4, 7} + Del(&s, func(t *int) (del bool) { + return *t == 4 + }) + t.Log(s) + if s[3] != 6 || s[4] != 7 { + t.FailNow() + } +} + func TestResize(t *testing.T) { var s = make([]byte, 10) t.Log(unsafe.Pointer(&s), len(s), cap(s))