Go语言中无内置取绝对值函数,整型切片推荐手动遍历判断符号取反,避免math.Abs的float64转换开销,适用于[]int、[]int32、[]int64等,性能更优。

Go语言中没有内置的数组或切片“取绝对值”函数,需手动遍历并调用 math.Abs(注意:它只接受 float64,对整数需先转换);若处理整型切片,更常用的是直接判断符号后取反,避免浮点转换开销。
整型切片转绝对值(推荐,高效无类型转换)
适用于 []int、[]int32、[]int64 等。不依赖 math 包,避免 float 转换,性能更好。
func absIntSlice(s []int) {
for i := range s {
if s[i] < 0 {
s[i] = -s[i]
}
}
}
// 使用示例
nums := []int{-3, 0, 5, -7, 2}
absIntSlice(nums)
// nums 变为 [3 0 5 7 2]
登录后复制
浮点型切片转绝对值(用 math.Abs)
适用于 []float64 或 []float32。注意 math.Abs 参数是 float64,float32 需显式转成 float64 再转回(如需保持类型)。
- 对
[]float64:
import "math"
func absFloat64Slice(s []float64) {
for i := range s {
s[i] = math.Abs(s[i])
}
}
登录后复制
- 对
[]float32(保留原类型):
func absFloat32Slice(s []float32) {
for i := range s {
s[i] = float32(math.Abs(float64(s[i])))
}
}
登录后复制
返回新切片(不修改原数据)
若需保持原切片不变,可封装为返回新切片的函数:
立即学习“go语言免费学习笔记(深入)”;
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~