Go:数组数组,切片数组,数组切片和切片切片

kil*_*s76 3 arrays go slice multidimensional-array

试图教自己,发现很难找到例子,我的大脑已经结束了.非常不确定3和4,并需要帮助使5工作.

package main
import "fmt"

func main () {
    println("0. Array:")
    var a = [...]int{4,5,6,7,8,9} //assign
    fmt.Println(a,"\n")

    println("1. Slice:")
    var as []int
    as = a[:] //assign
    fmt.Println(as,"\n")

    println("2. Array of arrays:")
    var b [4][len(a)]int
    for i:= range b { //assign
        b[i]=a
    }
    fmt.Println(b,"\n")

    println("3. Array of slices:")
    var d [len(b)][]int
    for i:= range b { // assign
        d[i] = b[i][:] //does this really work?
    }
    fmt.Println(d,"\n")

    println("4. Slice of arrays:")
    var c [][len(a)]int
    c = b[:][:] // assign, does this really work?
    fmt.Println(c,"\n")

    println("5. Slice of slices:")
    var e [][]int
//  e = c //  ???
    fmt.Println(e,"\n")
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*erg 5

第3部分有效.

第4部分中包含的不必要的[:].

println("4. Slice of arrays:")
var c [][len(a)]int
c = b[:]    // one [:], not two
fmt.Println(c, "\n")
Run Code Online (Sandbox Code Playgroud)

b[:]被评估为每个元素为a的切片[len(a)]int.如果添加另一个[:],则再次切片.因为对于任何切片s,s[:] == s它都是无操作.

第5部分,您可以切片切片.

println("5. Slice of slices:")
var e [][]int
e = d[:]
fmt.Println(e, "\n")
Run Code Online (Sandbox Code Playgroud)

我在http://play.golang.org/p/WDvJXFiAFe上发布了一个完整的例子.