如何声明一个未知大小的二维数组

问题描述

我这样做是为了实现。

csvData := make([][]string,100)
for i := range csvData {
                csvData[i] = make([]string,100)
            }

但我想删除 100,因为我不知道数组的实际大小。我想将一些字符串类型的元素推入二维数组。基本上我正在读取一个 CSV 文件并想提取它的元素并将它们存储在一个二维数组中。这样做的简单方法是什么?

解决方法

这是一个工作示例,它创建了一个 10 x 10 的切片。

package main

import (
    "fmt"
)

func main() {
    myData := "data"

    var nestedSlice [][]string
    nestedSize := 10

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

        jSlice := []string{}

        for j:=0;j<nestedSize; j++ {
            jSlice = append(jSlice,fmt.Sprintf("row:%v-col:%v-%v",i,j,myData))
        }

        nestedSlice = append(nestedSlice,jSlice)

    }

    fmt.Printf("result: %v\n",nestedSlice)
}

这是显示 10x10 切片的输出。

result: [[row:0-col:0-data row:0-col:1-data row:0-col:2-data row:0-col:3-data row:0-col:4-data row:0-col:5-data row:0-col:6-data row:0-col:7-data row:0-col:8-data row:0-col:9-data] [row:1-col:0-data row:1-col:1-data row:1-col:2-data row:1-col:3-data row:1-col:4-data row:1-col:5-data row:1-col:6-data row:1-col:7-data row:1-col:8-data row:1-col:9-data] [row:2-col:0-data row:2-col:1-data row:2-col:2-data row:2-col:3-data row:2-col:4-data row:2-col:5-data row:2-col:6-data row:2-col:7-data row:2-col:8-data row:2-col:9-data] [row:3-col:0-data row:3-col:1-data row:3-col:2-data row:3-col:3-data row:3-col:4-data row:3-col:5-data row:3-col:6-data row:3-col:7-data row:3-col:8-data row:3-col:9-data] [row:4-col:0-data row:4-col:1-data row:4-col:2-data row:4-col:3-data row:4-col:4-data row:4-col:5-data row:4-col:6-data row:4-col:7-data row:4-col:8-data row:4-col:9-data] [row:5-col:0-data row:5-col:1-data row:5-col:2-data row:5-col:3-data row:5-col:4-data row:5-col:5-data row:5-col:6-data row:5-col:7-data row:5-col:8-data row:5-col:9-data] [row:6-col:0-data row:6-col:1-data row:6-col:2-data row:6-col:3-data row:6-col:4-data row:6-col:5-data row:6-col:6-data row:6-col:7-data row:6-col:8-data row:6-col:9-data] [row:7-col:0-data row:7-col:1-data row:7-col:2-data row:7-col:3-data row:7-col:4-data row:7-col:5-data row:7-col:6-data row:7-col:7-data row:7-col:8-data row:7-col:9-data] [row:8-col:0-data row:8-col:1-data row:8-col:2-data row:8-col:3-data row:8-col:4-data row:8-col:5-data row:8-col:6-data row:8-col:7-data row:8-col:8-data row:8-col:9-data] [row:9-col:0-data row:9-col:1-data row:9-col:2-data row:9-col:3-data row:9-col:4-data row:9-col:5-data row:9-col:6-data row:9-col:7-data row:9-col:8-data row:9-col:9-data]]

根据您的用例,可能有一些方法可以优化 for 循环,因此它的时间复杂度不是 n^2,但这完全是一个不同的主题。

,

当创建一个由新数组支持的数组或切片时,您必须提供一个大小,否则编译器无法知道它有多大。但是当声明一个变量来保存在别处创建的数组时,只需将 var 声明为一个切片,输入 [][]string,这是您示例中 cvsData 的类型。