亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

數組的字符串表示

數組的字符串表示

Go
開心每一天1111 2022-07-04 16:47:20
在以下代碼中,該部分fmt.Println(string(a)+"\n")不起作用。有沒有一種通用的方法來獲取像數組這樣的構造的字符串表示形式?package mainimport "fmt"func main() {    //Array of size 10    fmt.Println("Original array")    var a [10]int    fmt.Println(a)    a[2] = 2    //worked    fmt.Printf("%v\n\n", a)    //not working - anyway to get string representation of a?    fmt.Println(string(a)+"\n")}為了更準確地說,給定一個對象obj,我們可以在 python 中使用字符串表示str(obj),在 Java 中使用obj.toString(),我想找出 Go 中的對應物是什么。
查看完整描述

2 回答

?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

我希望這是你想要的。我也對代碼進行了注釋,以便您理解。


package main


import (

    "fmt"

    "strconv"

)


// type alias for [10]int

type istr [10]int


// istr implements fmt.Stringer interface

// String formats the integer array to a string array

func (a istr) String() string {

    var s string = "["

    for i := 0; i < 9; i++ {

        s += strconv.Itoa(a[i]) + " "

    }

    s += strconv.Itoa(a[9]) + "]"

    return s

}


func main() {

    // Original

    var a [10]int

    fmt.Println("Original Array")

    fmt.Println(a)


    // Modified

    a[2] = 2

    fmt.Println("Modified Array")

    fmt.Println(a)


    // Expected

    var b istr

    b[2] = 2

    fmt.Println("String Array")

    fmt.Println(b)

}

更新:


添加可以擴展更多類型的通用解決方案。目前,它可以將 rune/int/bool 的 slice 轉換為 string。


package main


import (

    "fmt"

    "strconv"

    "strings"

)


func ToString(iv interface{}) string {

    var sb strings.Builder

    switch iv := iv.(type) {

    case []int:

        var length = len(iv)

        if length == 0 {

            return "[]"

        }

        sb.WriteRune('[')

        for i := 0; i < length-1; i++ {

            sb.WriteString(strconv.Itoa(iv[i]))

            sb.WriteRune(' ')

        }

        sb.WriteString(strconv.Itoa(iv[length-1]))

        sb.WriteRune(']')

    case []bool:

        var length = len(iv)

        if length == 0 {

            return "[]"

        }

        sb.WriteRune('[')

        for i := 0; i < length-1; i++ {

            sb.WriteString(strconv.FormatBool(iv[i]))

            sb.WriteRune(' ')

        }

        sb.WriteString(strconv.FormatBool(iv[length-1]))

        sb.WriteRune(']')

    case []rune:

        var length = len(iv)

        if length == 0 {

            return "[]"

        }

        sb.WriteRune('[')

        for i := 0; i < length-1; i++ {

            sb.WriteRune(iv[i])

            sb.WriteRune(' ')

        }

        sb.WriteRune(iv[length-1])

        sb.WriteRune(']')

    }

    return sb.String()

}


func main() {

    // Original

    var a []int = make([]int, 10)

    fmt.Println("Original Slice")

    fmt.Println(a)


    // Modified

    a[2] = 2

    fmt.Println("Modified Slice")

    fmt.Println(a)


    // String

    fmt.Println("String Slice")

    fmt.Println(ToString(a))


    // Boolean

    fmt.Println("Boolean Slice")

    var b []bool = make([]bool, 10)

    b[2] = true

    fmt.Println(ToString(b))


    fmt.Println("Rune Slice")

    var r []rune = make([]rune, 10)

    r[0] = 'a'

    r[1] = 'c'

    fmt.Println(ToString(r))

}


查看完整回答
反對 回復 2022-07-04
?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

包的任何變量都會檢查其Stringer接口的實現。如果它實現了Stringer接口,它會自動隱式調用String函數。


package main


import (

    "fmt"

)


// type alias for [10]int

type StringerIntArray [10]int


// String formats the StringerIntArray ([10]int) to a string

func (a StringerIntArray) String() string {

    var s string = "My Array is: "

    for i := 0; i < 9; i++ {

        s += fmt.Sprint(a[i]," ")

    }

    s = s[:len(s)-1]

    s+=" With Length:"+fmt.Sprint(len(a))

    return s

}


func main() {

    // Original

    var a [10]int

    fmt.Println("Original Array")

    fmt.Println(a)


    // Modified

    a[2] = 2

    fmt.Println("Modified Array")

    fmt.Println(a)


    // Expected

    var b StringerIntArray 

    b[2] = 2

    fmt.Println("String Array")

    fmt.Println(b)

}

https://play.golang.org/p/lE5gnHXGGF4


內置類型定義了默認的字符串格式;如果你需要修改它,你必須創建一個自定義類型并附加一個字符串函數


同樣通過閱讀您的評論,我想添加 fmt 包知道如何格式化不同類型的數據,但有時您想制作輸出字符串;是的,fmt 的輸出是字符串,如果使用 Sprint、Sprintf 函數,您可以取回字符串


你可以在這里閱讀更多關于它的信息 https://tour.golang.org/methods/17 https://golang.org/pkg/fmt/#Stringer


查看完整回答
反對 回復 2022-07-04
  • 2 回答
  • 0 關注
  • 171 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號