为了账号安全,请及时绑定邮箱和手机立即绑定

golang中的动态数组维度

golang中的动态数组维度

Go
POPMUISE 2023-01-03 15:51:28
我正在尝试在 Golang 中创建一个高维数组。有谁知道该怎么做?例如dims := [3,2,1]作为参数 -> 想要high_dims_array := make([3][2][1]int, 0)dims := [2]-> 想要high_dims_array := make([2]int, 0)dims := [3,3]-> 想要high_dims_array := make([3][3]int, 0)其中dims是包含维度的变量。
查看完整描述

2 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

谢谢我的朋友们。我想出了办法做到这一点


func initialCube(shape []int) []interface{} {

    // base condition

    if len(shape) <= 1 {

        dim := shape[len(shape)-1]

        retObj := make([]interface{}, dim)

        for i := 0; i < dim; i++ {

            retObj[i] = 0.0

        }

        return retObj

    } else { // recursive

        dim := shape[len(shape)-1]

        retObj := make([]interface{}, dim)

        for i := 0; i < dim; i++ {

            retObj[i] = initialCube(shape[:len(shape)-1])

        }

        return retObj

    }

}


查看完整回答
反对 回复 2023-01-03
?
qq_花开花谢_0

TA贡献1835条经验 获得超6个赞

这看起来像什么dolmen-go/multidim(它有助于分配具有所需元素数量的切片):

package main


import (

    "fmt"


    "github.com/dolmen-go/multidim"

)


func main() {

    var cube [][][]int

    multidim.Init(&cube, 8, 2, 2, 2)


    fmt.Println(cube)

}

输出:


[[[8 8] [8 8]] [[8 8] [8 8]]]

您还可以使用一个函数(仍然使用相同的库)来初始化您的 3*2 切片:


package main


import (

    "fmt"


    "github.com/dolmen-go/multidim"

)


func main() {

    var a [][]int


    multidim.Init(&a, func(i, j int) int {

        return 2*i + j + 1

    }, 3, 2)


    fmt.Println(a)


    var r [][]string


    multidim.Init(&r, func(i, j int) string {

        return "foobar"[i*3+j : i*3+j+1]

    }, 2, 3)


    fmt.Println(r)

}

输出:


[[1 2] [3 4] [5 6]]

[[f o o] [b a r]]


查看完整回答
反对 回复 2023-01-03
  • 2 回答
  • 0 关注
  • 107 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信