Go で int と slice をいい感じに扱いたい
こんなん考えたらわかるやろって感じの内容なのかもしれませんが、ググってもいい感じのが出なかったのでメモとして残しておきます。
競技プログラミングとかで使えるかも!
Go で int を1桁ずつ slice に入れる
見てみればなんだこんなもんかって感じです。除算と余りをいい感じに使う再帰関数になってます。
func digit(i int, list []int) []int {
if i > 0 {
return digit(i/10, append(list, i%10))
}
return list
}
Go で int の slice を逆転したい
作った int の slice を reverse したいときもありますよね?
そういうときはこれです。ループで頑張って入れ替えます。
func reverse(numbers []int) []int {
for i := 0; i < len(numbers)/2; i++ {
j := len(numbers) - i - 1
numbers[i], numbers[j] = numbers[j], numbers[i]
}
return numbers
}
int を 1 桁ずつ slice にして逆転する
上記の2つの関数を合わせてこんな感じで使います。
地道にやればなんでもいけますね!
package main
import (
"fmt"
)
func main() {
result := 708
var list []int
fmt.Println(digit(result, list))
}
func digit(i int, list []int) []int {
if i > 0 {
return digit(i/10, append(list, i%10))
}
return reverse(list)
}
func reverse(numbers []int) []int {
for i := 0; i < len(numbers)/2; i++ {
j := len(numbers) - i - 1
numbers[i], numbers[j] = numbers[j], numbers[i]
}
return numbers
}