簡體   English   中英

golang中的動態數組維度

[英]dynamic array dimension in golang

我正在嘗試在 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是包含尺寸的變量。

謝謝我的朋友。 我想出了一種方法來做到這一點

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

這看起來像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]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM