18 lines
326 B
Go
18 lines
326 B
Go
package slices
|
|
|
|
import "reflect"
|
|
|
|
// sl []T, f is func(*T) bool.
|
|
func FilterInPlace(sl interface{}, f interface{}) {
|
|
v := reflect.ValueOf(sl).Elem()
|
|
j := 0
|
|
for i := 0; i < v.Len(); i++ {
|
|
e := v.Index(i)
|
|
if reflect.ValueOf(f).Call([]reflect.Value{e.Addr()})[0].Bool() {
|
|
v.Index(j).Set(e)
|
|
j++
|
|
}
|
|
}
|
|
v.SetLen(j)
|
|
}
|