mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
21 lines
679 B
21 lines
679 B
// Copyright 2024 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package container |
|
|
|
import "slices" |
|
|
|
// FilterSlice ranges over the slice and calls include() for each element. |
|
// If the second returned value is true, the first returned value will be included in the resulting |
|
// slice (after deduplication). |
|
func FilterSlice[E any, T comparable](s []E, include func(E) (T, bool)) []T { |
|
filtered := make([]T, 0, len(s)) // slice will be clipped before returning |
|
seen := make(map[T]bool, len(s)) |
|
for i := range s { |
|
if v, ok := include(s[i]); ok && !seen[v] { |
|
filtered = append(filtered, v) |
|
seen[v] = true |
|
} |
|
} |
|
return slices.Clip(filtered) |
|
}
|
|
|