Распечатать матрицу в виде строки в golang - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть матрица целых чисел, представленная многомерным массивом.Я пытаюсь объединить числа в строковое представление, строки по столбцам.Мой наивный подход состоит в том, чтобы просмотреть все записи в матрице и добавить их к нулевой строке.

Однако я получаю сообщение об ошибке, которое моя функция добавления сообщает:

./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)
}

Что я неправильно понимаю относительно массивов, срезов и объединений, и как я могу правильно построить эту строку итеративно?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Вы можете просто объединить преобразованные целые числа в строки в ответ

func Matrix2String(t IntMat) MatString {
    s := ""

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

    return MatString(s)
}

Детская площадка

0 голосов
/ 22 сентября 2018

Соберите элементы в кусочек строки.Соедините фрагмент, чтобы получить результат.

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, ""))
}

Другой подход состоит в том, чтобы построить строку в байт [] и преобразовать в конце:

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)
}

Я не включил ни одногоразделители, потому что вопрос не включает их.

...