在golang中将矩阵打印成字符串

3
我有一个整数矩阵,用多元数组表示。我试图将数字连接成一个字符串表示,按行列排列。我的天真方法是遍历矩阵中的所有条目并将它们附加到一个空字符串中。
然而,我得到了一个错误,我的附加函数说:
./main.go:xx:yy: first argument to append must be slice; have string

我的代码如下:

type MatString string 
type IntMat [3][3]Int // external constraints require fixed size, symmetric.

func Matrix2String(t IntMat) MatString {
    // s var string
    s := ""
    for i := range t {
        for j := range t[i] {
            s = append(s[:], fmt.Sprintf("%s", j))
            // fmt.Sprintf(s)
        }
    }
    return MatString(s)
}

我对数组、切片和连接的理解有什么误解,如何逐步构建正确的字符串?


字符串是不可变的。只需使用 s+=fmt.Sprintf(.... 来重新创建字符串。关于字符串和切片的注释。在技术上,string 就是 []byte,但它是一个特定的 不可变 结构。因此,你不能像你试图做的那样使用 append - RayfenWindspear
2个回答

4

收集字符串切片中的元素。使用join函数组合切片以产生结果。

func Matrix2String(t IntMat) MatString {
    var s []string
    for i := range t {
        for _, n := range t[i] {
            s = append(s, fmt.Sprintf("%d", n))
        }
    }
    return MatString(strings.Join(s, ""))
}

另一种方法是在[]byte中构建字符串,并在最后进行转换:

func Matrix2String(t IntMat) MatString {
    var s []byte
    for i := range t {
        for _, n := range t[i] {
            s = strconv.AppendInt(s, int64(n), 10)
        }
    }
    return MatString(s)
}

因为问题没有包含分隔符,所以我没有包含任何分隔符。


这比我的评论更好。 - RayfenWindspear
明白了,还有一件事我需要改变:s = append(s, strconv.Itoa(n)) - Mittenchops

1
您可以将转换后的整数简单地连接到字符串中,以响应返回。
func Matrix2String(t IntMat) MatString {
    s := ""

   for i := range t {
      for _, n := range t[i] {
          s += fmt.Sprintf("%d", n)
      }
   }

    return MatString(s)
}

Playground

可以翻译为:

{{链接1:游乐场}}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接