Goでsliceを2次元sliceに変換する
2年に1回くらい必要になってその都度考えてしまうロジック。年々書ききるのに時間がかかるようになってきた 😔
func main() { slice := make([]int, 150) for i := 0; i < 150; i++ { slice[i] = i } results := split(&slice, 100) fmt.Printf("results size %d, result0 size %d, result1 size %d", len(results), len(results[0]), len(results[1])) // -> results size 2, result0 size 100, result1 size 50 } // sliceをmaxSizeのsliceに分割する func split(s *[]int, max int) [][]int { slice := *s // resultsのsizeを決定する sliceLen := len(slice) resultsSize := int(math.Ceil(float64(sliceLen) / float64(max))) results := make([][]int, resultsSize) for i := 0; i < resultsSize; i++ { from := i * max step := int(math.Min(float64(max), float64(sliceLen))) results[i] = slice[from : from+step] sliceLen -= step } return results }
GoはGenericsがないのが辛い。もっと簡単な方法ないかな 🤔