猿问

地图中除数的最佳重构

我有一个输入包的函数,它是包大小和数量的映射,它需要一个订单的总数量。


我需要获取包装尺寸的所有可除数,删除所有小于 1 的值,然后选择剩余最小数的最佳可除数。这个数字是提供的包装中的关键


注意:我有一个函数进一步向上跟踪,它消除了任何不可分割的可能性。


代码:


func optimalDivisble(packs map[int]int, oq int) (int, error) {

    divisables := make(map[int]float64)

    for key := range packs {

        divisables[key] = float64(oq) / float64(key)

    }


    // Remove zero divisibles

    filteredDivisibles := make(map[int]float64)

    for key, divisable := range divisables {

        if divisable >= 1 {

            filteredDivisibles[key] = divisable

        }

    }


    //  Get divisables

    var divisableSlice []float64

    for _, filteredDivisible := range filteredDivisibles {

        divisableSlice = append(divisableSlice, filteredDivisible)

    }


    sort.Float64s(divisableSlice)

    for key, filteredDivisible := range filteredDivisibles {

        if filteredDivisible == divisableSlice[0] {

            return key, nil

        }

    }


    return 0, errors.New("Could not find a divisable for quantity")

}

有人可以帮助重构这个,因为看到 3 个 for 循环似乎并不理想。什么会更习惯用 Go 语言?


RISEBY
浏览 127回答 1
1回答

吃鸡游戏

您可以处理包,计算最小可分度并在单个循环中获取它的密钥。您不需要中间步骤:    var minDiv float64    var minKey int    minSet:=false    for key := range packs {       divisable:=float64(oq) / float64(key)       if divisable>=1 {          if minDiv>divisable || !minSet {             minDiv=divisable             minKey=key             minSet=true          }       }    }    // minKey is what you need
随时随地看视频慕课网APP

相关分类

Go
我要回答