]> 127.0.0.1 Git - part/.git/commitdiff
slice.Del v0.28.20240617114802
authorqydysky <qydysky@foxmail.com>
Mon, 17 Jun 2024 11:42:29 +0000 (11:42 +0000)
committerqydysky <qydysky@foxmail.com>
Mon, 17 Jun 2024 11:42:29 +0000 (11:42 +0000)
slice/Slice.go
slice/Slice_test.go

index 78c4589ebbb7b045ce5c5a4b0800283a0140ad4f..708efbf27aea8d6439403e88070fcd0798d136b5 100644 (file)
@@ -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
+               }
+       }
+}
index bb33187f9431627824b9df4cfe49ee0df43edbf3..f9903c451bb5e8d550a1d0c2bbe4cf0383ca28b4 100644 (file)
@@ -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))