为了账号安全,请及时绑定邮箱和手机立即绑定

地图中除数的最佳重构

地图中除数的最佳重构

Go
RISEBY 2022-06-27 17:27:06
我有一个输入包的函数,它是包大小和数量的映射,它需要一个订单的总数量。我需要获取包装尺寸的所有可除数,删除所有小于 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 语言?
查看完整描述

1 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

您可以处理包,计算最小可分度并在单个循环中获取它的密钥。您不需要中间步骤:


    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


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信