aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoramdahliu <zenghao235711@gmail.com>2023-07-03 10:09:36 +0000
committerGopher Robot <gobot@golang.org>2023-07-20 17:55:38 +0000
commit47b403ad2dba61e653ec24da7d84cb9decea4939 (patch)
treeaa6e7b22e839339e2b5023275d7d42e9db1f766f /src
parent2627d2d1897741d0839fc57047741c3c8ce9ffa4 (diff)
downloadgo-47b403ad2dba61e653ec24da7d84cb9decea4939.tar.xz
slices: refactor DeleteFunc to improve code readability
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>
Diffstat (limited to 'src')
-rw-r--r--src/slices/slices.go21
1 files changed, 9 insertions, 12 deletions
diff --git a/src/slices/slices.go b/src/slices/slices.go
index afeed0afb5..725d91d8f5 100644
--- a/src/slices/slices.go
+++ b/src/slices/slices.go
@@ -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