我是新来的。这是我面临的问题。
该函数以任意大小的2D数组作为参数:
func PrintArray(a [][]string) {
for _, v1 := range a {
for _, v2 := range v1 {
fmt.Printf("%s ", v2)
}
fmt.Printf("\n")
}
}如您所见,因为嵌套循环使用range。数组的大小并不重要。
但是当我试图调用这个函数时:
a := [3][2]string{
{"line", "tiger"},
{"cat", "dog"},
{"pigeon", "hamster"},
}
PrintArray(a[:])它抱怨:
不能在参数中使用:作为PrintArray的类型字符串
但是,它也不会使用a[:][:]进行编译。
在GO lang中定义任意大小的多维数组的正确方法是什么?
发布于 2019-03-20 22:20:15
例如,
package main
import (
"fmt"
)
func main() {
a := [][]string{
{"line", "tiger"},
{"cat", "dog"},
{"pigeon", "hamster"},
}
PrintSlices(a)
}
func PrintSlices(a [][]string) {
for _, v1 := range a {
for _, v2 := range v1 {
fmt.Printf("%s ", v2)
}
fmt.Printf("\n")
}
}操场:https://play.golang.org/p/3mPDTIEUQmT
输出:
line tiger
cat dog
pigeon hamster分配矩阵:
package main
import (
"fmt"
)
func NewMatrix(rows, cols int) [][]int {
m := make([][]int, rows)
for r := range m {
m[r] = make([]int, cols)
}
return m
}
func main() {
m := NewMatrix(3, 2)
fmt.Println(m)
}操场:https://play.golang.org/p/qvwQu2giRcP
输出:
[[0 0] [0 0] [0 0]]发布于 2019-03-20 22:17:52
有趣的问题。这应该能行
a := [][]string{
{"line", "tiger"},
{"cat", "dog"},
{"pigeon", "hamster"},
}
PrintArray(a[:])从错误消息中,我猜用大小定义的数组是不同类型的。
例如,如果PrintArray如下所示:
func PrintArray(a [3][2]string) {
然后,您可以传递一个定义为:
a := [3][2]string。
如果我们改变了PrintArray方法或a中的数字,使它们不同,那么我们将得到一条错误消息,即:
cannot use a (type [3][2]string) as type [3][1]string in argument to PrintArray
https://stackoverflow.com/questions/55270928
复制相似问题