douquanzhan0315
2018-01-26 18:01
浏览 155
已采纳

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

I'm Newbie to Go, I have List of Tuple in python as you see below:

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

how can i convert data into GO equivalent, I have googled it but everywhere they have specified with the same data-type of multidimensional array like this,

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

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

a := [1][2]string{{"lion","dog"}}

help me out..!

Updated:

for Mixed-type Collections of Array:

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

图片转代码服务由CSDN问答提供 功能建议

我是新手,我在python中有元组列表,如下所示: \ n

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

我如何将数据转换为GO等效文件,我已经对其进行了谷歌搜索,但是到处都指定了像这样的多维数组相同的数据类型, < pre> 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条回答 默认 最新

  • dongluanan7163 2018-01-26 18:05
    已采纳

    There are two possible solutions here: actual multidimensional arrays of mixed data types (what you seem to be asking for) and arrays of structs (what you probably want).

    Multidimensional arrays of mixed data-types using interfaces

    If you really want to do multi-dimensional arrays of mixed types, you need to use interfaces:

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

    Outputs:

    [[1 dog] [2 cat]]

    Interfaces must be handled with care as they can be... anything. This means that there is no enforcement that the first argument is an int and the second is a string. I can just as easily add {"lion", 3} and the compiler will be happy, but your program will crash if it doesn't check the type first.

    You can do type conversions and assertions on interfaces to ensure the correct data types.

    Arrays of structured data

    Putting python tuples in a list does not make it a multi-dimensional array. The closest equivalent in Go would be an array of structs.

    type animal struct {
      id int
      name string
    }
    
    animalList := [2]animal{{1, "cat"}, {2, "dog"}}
    fmt.Println(animalList)
    

    Outputs:

    [{1 cat} {2 dog}]

    In this case, the types are clearly defined, and I cannot store {"lion", 3} in the array.

    final note: [size]type defines an array. []type defines a slice. I'm using arrays here as this is what you mention in your question, but slices would be just as (or probably more) appropriate.

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • douli4337 2018-01-26 18:19

    You can't create multi dimensional array with two different type. Better to use structure. Hope this will work for your purpose.

    package main
    
    import "fmt"
    
    type Data struct {
        i int
        s string
    }
    
    func main() {
        data := []Data{
            {435347,"cat"},
            {435347,"feline"},
            {435347,"lion"},
        }
    
        fmt.Println(data)
    }
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题