1 回答

TA贡献1795条经验 获得超7个赞
发生的情况是,切片是对后备数组的引用,排序会就地对切片进行排序。这意味着对排序的调用。Float64s实际上是在修改(排序)x切片的内容(更准确地说,是x的子切片,但支持数组是相同的)。
正如我在上面的评论中提到的,仅仅使用排序来查找最小值/最大值不是一个好主意,因为它会比扫描最小值/最大值的简单循环慢。但是,如果您真的想使用它,则需要在将这些切片进行排序之前制作这些切片的深层副本。漂浮64s。
关于上述代码的小注意事项:如果所有元素都是负数,或者如果它们都是NaN,则您的MaxMin函数并不是真正正确的。您可能希望执行类似操作:https://godbolt.org/z/E5e5q7ePa(未经过测试)。
func MinMax(n []float64) (min float64, max float64) {
min, max = math.NaN(), math.NaN()
for _, e := range n {
if e < min || (math.IsNaN(min) && !math.IsNaN(e)) {
min = e
}
if e > max || (math.IsNaN(max) && !math.IsNaN(e)) {
max = e
}
}
return
}
- 1 回答
- 0 关注
- 107 浏览
添加回答
举报