我有一個輸入包的函數,它是包大小和數量的映射,它需要一個訂單的總數量。我需要獲取包裝尺寸的所有可除數,刪除所有小于 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 關注
- 143 瀏覽
添加回答
舉報
0/150
提交
取消