【问题标题】:How to create a matrix of bytes Golang [closed]如何创建字节矩阵 Golang [关闭]
【发布时间】:2020-09-21 23:46:14
【问题描述】:

我找不到如何在 Golang 中创建字节矩阵。

test := {
{"6",".",".","1","9","5",".",".","."},
{".","9","8",".",".",".",".","6","."},
{"8",".",".",".","6",".",".",".","3"},
{"4",".",".","8",".","3",".",".","1"},
{"7",".",".",".","2",".",".",".","6"},
{".","6",".",".",".",".","2","8","."},
{".",".",".","4","1","9",".",".","5"},
{".",".",".",".","8",".",".","7","9"}}

语法错误:意外 {,期望表达式 语法错误:意外 { 在语句末尾

或者我使用的第二种方式

test := make([][]byte, 9);
test = append(test, []byte{"5","3",".",".","7",".",".",".","."})
test = append(test, []byte{"6",".",".","1","9","5",".",".","."})

无法将“5”(无类型字符串类型)转换为字节类型

【问题讨论】:

  • 使用像'5'这样的单引号并参加围棋之旅。
  • 我尝试使用单引号并得到同样的错误
  • 你拿Tour of Go了吗?它回答了像这样的基本语法问题。这样做,如果仍然有问题,请回来。

标签: go matrix slice


【解决方案1】:

您的第一个示例缺少composite literal 的类型。

由于您使用了string 值,因此可以使用(在Go Playground 上尝试):

test := [][]string{
    {"6", ".", ".", "1", "9", "5", ".", ".", "."},
    {".", "9", "8", ".", ".", ".", ".", "6", "."},
    {"8", ".", ".", ".", "6", ".", ".", ".", "3"},
    {"4", ".", ".", "8", ".", "3", ".", ".", "1"},
    {"7", ".", ".", ".", "2", ".", ".", ".", "6"},
    {".", "6", ".", ".", ".", ".", "2", "8", "."},
    {".", ".", ".", "4", "1", "9", ".", ".", "5"},
    {".", ".", ".", ".", "8", ".", ".", "7", "9"},
}

如果您想要一个“字节矩阵”,请使用可以分配给byte 类型变量的常量文字,例如一个rune literal(在Go Playground上试试):

test := [][]byte{
    {'6', '.', '.', '1', '9', '5', '.', '.', '.'},
    {'.', '9', '8', '.', '.', '.', '.', '6', '.'},
    {'8', '.', '.', '.', '6', '.', '.', '.', '3'},
    {'4', '.', '.', '8', '.', '3', '.', '.', '1'},
    {'7', '.', '.', '.', '2', '.', '.', '.', '6'},
    {'.', '6', '.', '.', '.', '.', '2', '8', '.'},
    {'.', '.', '.', '4', '1', '9', '.', '.', '5'},
    {'.', '.', '.', '.', '8', '.', '.', '7', '9'},
}

如果将行枚举为字符串,并使用[]byte()conversion 将行转换为[]byte,您可以实现相同的效果(在Go Playground 上尝试):

test := [][]byte{
    []byte("6..195..."),
    []byte(".98....6."),
    []byte("8...6...3"),
    []byte("4..8.3..1"),
    []byte("7...2...6"),
    []byte(".6....28."),
    []byte("...419..5"),
    []byte("....8..79"),
}

最后一个版本可能更令人赏心悦目并且更容易修改,但请注意,它只有在行中使用 ASCII 字符时才有效,因为高于 127 的字符在 UTF-8 编码中具有多字节(这就是Go 将字符串存储在内存中),因此将这样的 string 转换为 []byte 将导致字节数多于字符数。

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 2017-04-15
    • 2013-09-15
    相关资源
    最近更新 更多