我有一个输入包的函数,它是包大小和数量的映射,它需要一个订单的总数量。我需要获取包装尺寸的所有可除数,删除所有小于 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
- 1 回答
- 0 关注
- 126 浏览
添加回答
举报
0/150
提交
取消