網頁

2022/9/20

Golang 整數轉陣列 int to slice array

Go將整數的每個位數拆為slice,例如123轉為[1, 2, 3]


下面的IntToSlice()函式把正整數拆為slice陣列(不考慮負數)。

main.go

package main

import (
    "fmt"
)

func main() {
    fmt.Println(IntToSlice(123))   // [1 2 3]
    fmt.Println(IntToSlice(1))     // [1]
    fmt.Println(IntToSlice(-123))  // []
    fmt.Println(IntToSlice(0))     // 0 
}

func IntToSlice(num int) []int {
    if num == 0 {
        return return []int{0}
    }
    
    var ints = make([]int, 0)
    for num > 0 {
        rem := num % 10 // 除以10的餘數
        ints = append(ints, rem)
        num /= 10
    }

    return Reverse(ints)
}

// [3,2,1] => [1,2,3]
func Reverse(ints []int) []int {
    i := 0
    j := len(ints) - 1
    for i < j {
        ints[i], ints[j] = ints[j], ints[i] // 位置對調
        i++
        j--
    }
    return ints
}

另一種方式。

main.go

package main

import (
    "fmt"
)

func main() {
    fmt.Println(IntToSlice(123))   // [1 2 3]
    fmt.Println(IntToSlice(1))     // [1]
    fmt.Println(IntToSlice(-123))  // []
    fmt.Println(IntToSlice(0))     // 0 
}

func IntToSlice(num int) []int {
    if num == 0 {
        return return []int{0}
    }
	var ints = make([]int, CountDigits(num))
    i := 0
    for num > 0 {
        rem := num % 10
        ints[len(ints)-1-i] = rem
        num /= 10
        i++
    }

    return ints
}

func CountDigits(num int) int {
    count := 0
    for num >= 1 {
        num /= 10
        count++
    }
    return count
}

沒有留言:

張貼留言