我找不到如何在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"}}
syntax error: unexpected {, expecting expression syntax error: unexpected { at end of statement
还是我使用的第二种方式
test := make([][]byte, 9);
test = append(test, []byte{"5","3",".",".","7",".",".",".","."})
test = append(test, []byte{"6",".",".","1","9","5",".",".","."})
cannot convert "5" (type untyped string) to type byte
分析解答
您的第一个示例缺少复合文字的类型。
由于您使用了string
值,因此可以使用(在去游乐场上尝试):
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 matrix",请使用常量文字,这些常量可以分配给byte
类型的变量,例如符文文字(在去游乐场上尝试):
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()
转换将行转换为[]byte
(在去游乐场上尝试),则可以实现相同的效果:
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编码的multi-bytes(这是Go将字符串存储在内存中的方式),因此将此类string
转换为[]byte
将导致字节数超过其字符数。