为了账号安全,请及时绑定邮箱和手机立即绑定

转到:数组数组,切片数组,数组切片和切片切片

转到:数组数组,切片数组,数组切片和切片切片

Go
翻阅古今 2021-05-16 12:13:55
试图自学,发现很难找到例子,我的大脑已经陷入困境。非常不确定3和4,需要帮助使5正常工作。package mainimport "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")}
查看完整描述

2 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

答案是“这真的有用吗?” 取决于您的期望。在http://play.golang.org/p/7Z5hKioTI_中考虑此示例


package main


import "fmt"


func main() {

    fmt.Println("0. Array:")

    var a = [...]int{4, 5, 6, 7, 8, 9}  //assign

    fmt.Println(a, "\n")


    fmt.Println("1. Slice:")

    var as []int

    as = a[:]   //assign

    fmt.Println(as, "\n")


    fmt.Println("new slice:")

    ns := make([]int, len(a))

    copy(ns, a[:])

    fmt.Print(ns, "\n\n")


    fmt.Println("modifying array...")

    a[0] = 10

    fmt.Print("array is now:\n", a, "\n\n")

    fmt.Print("slice is now:\n", as, "\n\n")

    fmt.Print("new slice is still:\n", ns, "\n")

}

它显示了切片如何具有基础数组,以及OP中的示例使用相同的基础数组来构成切片。如果要使切片具有独立的内容,则必须制作新的切片并复制数据。(或者有附加的技巧...)


另外请注意,println将数据发送到stderr而不是stdout,并且将某些数据类型的格式设置为与fmt.Println不同。为避免混淆,最好保持使用fmt.Println的习惯。



查看完整回答
反对 回复 2021-05-24
  • 2 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信