侃侃尔雅
您可以对切片进行反向排序,然后找到第一个负数:package mainimport "sort"func main() { a := []float64{0, 1, 2, -1, -2, -10, 10, 20} sort.Slice(a, func(d, e int) bool { return a[e] < a[d] }) n := sort.Search(len(a), func(n int) bool { return a[n] < 0 }) println(a[n] == -1)}或者按符号排序,然后按绝对值排序:package mainimport "math"type sFunc func(a, b float64) boolvar sFuncs = []sFunc{ func(a, b float64) bool { return math.Copysign(1, a) < math.Copysign(1, b) }, func(a, b float64) bool { return math.Abs(a) < math.Abs(b) },}结果:package mainimport ( "fmt" "sort")func main() { floats := []float64{0, 1, 2, -1, -2, -10, 10, 20} sort.Slice(floats, func(a, b int) bool { fa, fb := floats[a], floats[b] for _, sf := range sFuncs { if sf(fa, fb) { return true } if sf(fb, fa) { break } } return false }) fmt.Println(floats) // [-1 -2 -10 0 1 2 10 20]}https://golang.org/pkg/sort#Searchhttps://golang.org/pkg/sort#Slice