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 關注
- 101 瀏覽
添加回答
舉報