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

时间:2018-01-26 18:01:10

标签: go multidimensional-array

我是新手,我在python中列出了元组,如下所示:

data  = [
    (435347,'cat'),  
    (435347,'feline'),
    (435347,'lion'),
    (6765756,'dog'),
    (6765756,'hound'),
    (6765756,'puppy'),
    (435347,'kitten'),
    (987977,'frog')
    ]

我怎样才能将数据转换成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"}}

帮我解决..!

更新:

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

array := []interface{}{1, "dog", "lion", 12, 45.09, true, false}

2 个答案:

答案 0 :(得分:6)

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

使用接口

的混合数据类型的多维数组

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

interfaceArray := [2][2]interface{}{{1,"dog"},{2,"cat"}}
fmt.Println(interfaceArray)

输出:

  

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

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

您可以在接口上执行type conversions and assertions以确保正确的数据类型。

结构化数据阵列

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

type animal struct {
  id int
  name string
}

animalList := [2]animal{{1, "cat"}, {2, "dog"}}
fmt.Println(animalList)

输出:

  

[{1 cat} {2 dog}]

在这种情况下,类型已明确定义,我无法将{"lion", 3}存储在数组中。

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

答案 1 :(得分: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)
}