Help us understand the problem. What is going on with this article?

Go で複数桁の数字を slice に入れたい時、そして reverse させたい時

More than 1 year has passed since last update.

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
}
Asuforce
こんにちは、本業は SRE ですが色々やってます
https://asuforce.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away