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)
|
||
|
}
|