]> Cypherpunks repositories - gostls13.git/commitdiff
slices: refactor DeleteFunc to improve code readability
authoramdahliu <zenghao235711@gmail.com>
Mon, 3 Jul 2023 10:09:36 +0000 (10:09 +0000)
committerGopher Robot <gobot@golang.org>
Thu, 20 Jul 2023 17:55:38 +0000 (17:55 +0000)
Reuse IndexFunc function to avoid confusing subscript indexing, and to reduce code nesting depth.

Change-Id: I309416ebf928071f71054433e078f0fda802fba8
GitHub-Last-Rev: af54738bda7f27afda5f92496363c0a68493c369
GitHub-Pull-Request: golang/go#61154
Reviewed-on: https://go-review.googlesource.com/c/go/+/507635
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Reviewed-by: Heschi Kreinick <heschi@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/slices/slices.go

index afeed0afb522ceafe29a63aaa0194ae7b9e2d46b..725d91d8f5c151f867a90d55d1164cfe27b5cd1d 100644 (file)
@@ -228,21 +228,18 @@ func Delete[S ~[]E, E any](s S, i, j int) S {
 // zeroing those elements so that objects they reference can be garbage
 // collected.
 func DeleteFunc[S ~[]E, E any](s S, del func(E) bool) S {
+       i := IndexFunc(s, del)
+       if i == -1 {
+               return s
+       }
        // Don't start copying elements until we find one to delete.
-       for i, v := range s {
-               if del(v) {
-                       j := i
-                       for i++; i < len(s); i++ {
-                               v = s[i]
-                               if !del(v) {
-                                       s[j] = v
-                                       j++
-                               }
-                       }
-                       return s[:j]
+       for j := i + 1; j < len(s); j++ {
+               if v := s[j]; !del(v) {
+                       s[i] = v
+                       i++
                }
        }
-       return s
+       return s[:i]
 }
 
 // Replace replaces the elements s[i:j] by the given v, and returns the