go - 如何声明两种不同数据类型的多维数组

标签 go multidimensional-array

我在 python 中有元组列表,如下所示:

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

我怎样才能将数据转换成 GO 等价物,我用谷歌搜索了它,但他们到处都指定了像这样的相同数据类型的多维数组,

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}

最佳答案

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

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

如果真的要做混合类型的多维数组,需要用到接口(interface):

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

输出:

[[1 dog] [2 cat]]

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

你可以做到 type conversions and assertions在接口(interface)上以确保正确的数据类型。

结构化数据数组

将 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 定义一个 slice 。我在这里使用数组,因为这是你在问题中提到的,但 slice 也同样(或可能更)合适。

关于go - 如何声明两种不同数据类型的多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48467025/

相关文章:

sockets - 为什么在并发连接到服务器时接受两个相同的 5 元组套接字?

java - 帕斯卡三角形定位

c++ - 计算数组中每个连续的整数总和

rest - 如何在 go-restful 中绑定(bind)处理程序?

go - 将时间从 DB 转换为自定义时间失败

c - C 中的动态字符串数组

c++ - 比较 blitz++、 Armadillo 、boost::MultiArray

c - 尝试打印二维数组中的值

go - 分配给 map 中的匿名结构值

docker - 从 Dockerfile 定义一个 crontab,利用主机的 crontab 每小时运行一个容器化的 Go 程序