如何声明两个不同数据类型的多维数组

Pra*_*dam 6 go multidimensional-array

我是Gobie的新手,我在python中有Tuple列表,如下所示:

data  = [
    (435347,'cat'),  
    (435347,'feline'),
    (435347,'lion'),
    (6765756,'dog'),
    (6765756,'hound'),
    (6765756,'puppy'),
    (435347,'kitten'),
    (987977,'frog')
    ]
Run Code Online (Sandbox Code Playgroud)

我怎样才能将数据转换成GO等价物,我用Google搜索了它,但是他们用相同的数据类型的多维数组指定了它,如下所示,

int_list := [4][2]int{{1, 0}, {2, 0}, {3, 0}, {4, 0}}

string_list := make([][]string, 0)

a := [1][2]string{{"lion","dog"}}
Run Code Online (Sandbox Code Playgroud)

帮帮我..!

更新:

对于数组的混合类型集合:

array := []interface{}{1, "dog", "lion", 12, 45.09, true, false}
Run Code Online (Sandbox Code Playgroud)

Mar*_*arc 6

这里有两种可能的解决方案:混合数据类型的实际多维数组(你似乎要求的)和结构数组(你可能想要的).

使用接口的混合数据类型的多维数组

如果你真的想要做混合类型的多维数组,你需要使用接口:

interfaceArray := [2][2]interface{}{{1,"dog"},{2,"cat"}}
fmt.Println(interfaceArray)
Run Code Online (Sandbox Code Playgroud)

输出:

[[1只狗] [2只猫]]

接口必须小心处理,因为它们可以......任何东西.这意味着没有强制执行第一个参数是int,第二个参数是字符串.我可以轻松添加{"lion", 3}并且编译器会很高兴,但如果它不首先检查类型,程序将崩溃.

您可以在接口上键入转换和断言,以确保正确的数据类型.

结构化数据阵列

将python元组放在列表中并不会使它成为一个多维数组.Go中最接近的等价物是一系列结构.

type animal struct {
  id int
  name string
}

animalList := [2]animal{{1, "cat"}, {2, "dog"}}
fmt.Println(animalList)
Run Code Online (Sandbox Code Playgroud)

输出:

[{1 cat} {2 dog}]

在这种情况下,类型是明确定义的,我不能存储{"lion", 3}在数组中.

最后注释:[size]type定义一个数组.[]type定义切片.我在这里使用数组,因为这是你在问题中提到的,但切片就像(或可能更多)适当一样.


aer*_*ite 6

您无法使用两种不同的类型创建多维数组.更好地使用结构.希望这将有助于您的目的.

package main

import "fmt"

type Data struct {
    i int
    s string
}

func main() {
    data := []Data{
        {435347,"cat"},
        {435347,"feline"},
        {435347,"lion"},
    }

    fmt.Println(data)
}
Run Code Online (Sandbox Code Playgroud)