登录
首页 >  Golang >  Go问答

在 GO 中如何通过函数参数传递不定长度的多维数组

来源:stackoverflow

时间:2024-03-02 22:18:29 240浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《在 GO 中如何通过函数参数传递不定长度的多维数组》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

我是 go 新手。这就是我面临的问题。

该函数采用任意大小的二维数组作为参数:

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 的参数中使用 [:](类型 [][2]string)作为类型 [][]string

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

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


解决方案


在 go 中,array typesslice types 是不同的。将切片传递给切片。

例如,

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]]

有趣的问题。这应该有效

a := [][]string{
    {"line", "tiger"},
    {"cat", "dog"},
    {"pigeon", "hamster"},
}
PrintArray(a[:])

从错误消息中,我猜测用 size 定义的数组是不同类型的。

例如,如果 printarray 如下所示:

func printarray(a [3][2]字符串) {

然后你可以向它传递一个定义为的数组:

a := [3][2]string

如果我们改变 printarray 方法或 a 中的数字,使它们不同,我们会收到一条错误消息:

不能在 printarray 的参数中使用(类型 [3][2]string)作为类型 [3][1]string

以上就是《在 GO 中如何通过函数参数传递不定长度的多维数组》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>