gpt4 book ai didi

sorting - map 中可分解部分的最佳重构

转载 作者:行者123 更新时间:2023-12-01 22:00:22 25 4
gpt4 key购买 nike

我有一个函数,该函数接受包的输入,这是包大小和数量的映射,并且需要一个订单的总量。
我需要获取包装尺寸的所有整除数,删除所有小于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循环似乎并不理想。什么会更惯用呢?

最佳答案

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

    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

关于sorting - map 中可分解部分的最佳重构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63941080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com