我在 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/