鍍金池/ 問答/GO/ golang slice 遍歷取值問題

golang slice 遍歷取值問題

func MaxMin(position [][]float64) (max, min []float64) {

    for k, v := range position {
        if k == 0 {
            max = position[k]
            min = position[k]
            continue
        }
        if v[0] > max[0] {
            max[0] = v[0]
        }
        if v[1] > max[1] {
            max[1] = v[1]
        }
        if v[0] < min[0] {
            min[0] = v[0]
        }
        if v[1] < min[1] {
            min[1] = v[1]
        }
        fmt.Println(v)
    }
    return
}

最后return出來的值永遠是遍歷的最后一位,這應該是受slice的特性所影響
求優(yōu)化

回答
編輯回答
吢丕
func MaxMin(position [][]float64) (max, min [2]float64) { // 改為數(shù)組解決

    for k, v := range position {
        if k == 0 {
            max = [2]float64{
                position[k][0],
                position[k][1],
            }
            min = [2]float64{
                position[k][0],
                position[k][1],
            }
            continue
        }
        if v[0] > max[0] {
            max[0] = v[0]
        }
        if v[1] > max[1] {
            max[1] = v[1]
        }
        if v[0] < min[0] {
            min[0] = v[0]
        }
        if v[1] < min[1] {
            min[1] = v[1]
        }
        fmt.Println(v)
    }
    return
}
2018年7月13日 05:36
編輯回答
兔囡囡
func MaxMin(position [][]float64) (max, min []float64) {

    for k, v := range position {
        if k == 0 {
            max = position[k]
            min = position[k]
            continue
        }
        v: = v // 加上
        if v[0] > max[0] {
            max[0] = v[0]
        }
        if v[1] > max[1] {
            max[1] = v[1]
        }
        if v[0] < min[0] {
            min[0] = v[0]
        }
        if v[1] < min[1] {
            min[1] = v[1]
        }
        fmt.Println(v)
    }
    return
}
2017年6月13日 15:02