如何基于传递给数组的长度创建2D数组

时间:2018-12-02 01:21:36

标签: go

func matrix(n int) {
  var result [n][n]int //Does not work
  fmt.Println(result)
}

如何根据传递给数组的长度创建2D数组; n是数组的长度。

2 个答案:

答案 0 :(得分:1)

您必须分别分配其他尺寸,例如:

func matrix(n int) {
    var result = make([][]int, n)
    for i := range result {
        result[i] = make([]int, n)
    }
    fmt.Println(result)
}

使用在编译时已知的具有固定维数的实际数组,您可以执行以下操作:

var result [5][5]int

但事实并非如此。

答案 1 :(得分:1)

  

The Go Programming Language Specification

     

Array types

     

数组是单个类型的编号元素序列,称为   元素类型。元素的数量称为长度,且为   永远不会消极。

ArrayType   = "[" ArrayLength "]" ElementType .
ArrayLength = Expression .
ElementType = Type .
     

长度是数组类型的一部分;它必须评估为   可通过类型int的值表示的非负常数。长度   可以使用内置函数len查找数组a的数组。的   元素可以通过整数索引0到len(a)-1进行寻址。数组   类型始终是一维的,但可以组成形式   多维类型。


  

长度是数组类型的一部分;它必须评估为   可通过int类型的值表示的非负常量。

数组的大小在编译时是固定的。


使用切片。

例如,

package main

import "fmt"

func matrix(n int) [][]int {
    m := make([][]int, n)
    for i := range m {
        m[i] = make([]int, n)
    }
    return m
}

func main() {
    fmt.Println(matrix(3))
}

游乐场:https://play.golang.org/p/D1MHmm5KCht

输出:

[[0 0 0] [0 0 0] [0 0 0]]