首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将任意大小的多维数组作为GO中的函数参数传递

如何将任意大小的多维数组作为GO中的函数参数传递
EN

Stack Overflow用户
提问于 2019-03-20 22:12:19
回答 2查看 1K关注 0票数 1

我是新来的。这是我面临的问题。

该函数以任意大小的2D数组作为参数:

代码语言:javascript
复制
func PrintArray(a [][]string) {
    for _, v1 := range a {
        for _, v2 := range v1 {
            fmt.Printf("%s ", v2)
        }
        fmt.Printf("\n")
    }
}

如您所见,因为嵌套循环使用range。数组的大小并不重要。

但是当我试图调用这个函数时:

代码语言:javascript
复制
a := [3][2]string{
    {"line", "tiger"},
    {"cat", "dog"},
    {"pigeon", "hamster"},
}
PrintArray(a[:])

它抱怨:

不能在参数中使用作为PrintArray的类型字符串

但是,它也不会使用a[:][:]进行编译。

在GO lang中定义任意大小的多维数组的正确方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-20 22:20:15

在Go中,数组类型切片类型是不同的。把切片切成薄片。

例如,

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
line tiger 
cat dog 
pigeon hamster

分配矩阵:

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
[[0 0] [0 0] [0 0]]
票数 4
EN

Stack Overflow用户

发布于 2019-03-20 22:17:52

有趣的问题。这应该能行

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55270928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档