如何在Go中表示变量嵌套列表

时间:2017-10-15 01:45:27

标签: list go nested-lists

如何列出如下:

{{1,2}, 3, {5, 6, 7}, 8, 9} 
在Go中代表?我需要能够将嵌套的变量大小列表从主函数传递给Go中的函数。然后,通过访问列表的各个元素/子列表,将在函数内处理此列表。 请注意,列表的大小和子列表的大小是可变的。

1 个答案:

答案 0 :(得分:2)

您有两个基本选择:

首先,你可以做一片切片:

a := [][]int{
    []int{1,2},
    []int{3},
    []int{5, 6, 7},
    []int{8},
    []int{9},
}

这不是你想要的,但它很接近。在这种情况下,单个项目表示为具有一个项目的切片。简单。

其次,您可以制作一个interface{}切片,并使用类型开关来识别和解压缩每个索引:

b := []interface{}{
    []int{1,2},
    3,
    []int{5, 6, 7},
    8,
    9,
}

使用起来要复杂得多,但也更接近你想要的。

从切片b读取项目的示例:

// Note that things can get a lot more complicated if you have
// more types and/or you nest deeper than one level.
for _, iv := range b {
    switch v := iv.(type) {
    case []int:
        // v is an int slice
    case int:
        // v is an int
    default:
        // This will probably be an error case.
    }
}

我建议你坚持使用第一种方法,除非你有充分的理由不这样做。