我有一个输入包的函数,它是包大小和数量的映射,它需要一个订单的总数量。
我需要获取包装尺寸的所有可除数,删除所有小于 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 语言?
吃鸡游戏
相关分类