Golang——数组array

Cici冬雪 · · 540 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

数组是同一种数据类型元素的集合。
数组声明时需要确定数组大小,一旦定义,不可修改
数组的长度必须是常量,并且长度是数据类型的一部分[5]int[3]int是不同的类型。
数组索引从0开始。
数组是值类型。

var 变量名 [数量]T

声明和初始化

func main() {
    //数组声明
    var a [5]int
    var b [3]int
    //数组赋值
    a = [5]int{1,2,3,4,5}    
    b = [3]int{1}  
    fmt.Println(a)   //[1 2 3 4 5]
    fmt.Println(b)   //[1 0 0]
    fmt.Printf("a:%T b:%T\n", a, b)  //a:[5]int b:[3]int

    //数组声明又赋值
    var c = [3]string{"a","b","c"}
    fmt.Println(c) //[a b c]

    //不填写长度,系统推导
    var d = [...]int{1,3,4,5,6,7,8,9}
    fmt.Println(d)    //[1 3 4 5 6 7 8 9]

    //根据索引值初始化
    var e [20]int
    e = [20]int{19:1}
    fmt.Println(e)     //[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]
} 

数组使用

func main() {
    var c = [3]string{"a","b","c"}

    //直接通过索引取数组中某个值
    fmt.Println("c[1]=" + c[1])

    // for遍历
    for i := 0; i < len(c); i++ {
        fmt.Printf("c[%d]=%s\n", i, c[i])
    }

    // for range遍历
    for i := range c {
        fmt.Printf("c[%d]=%s\n", i, c[i])
    }
    for i,v := range c {
        fmt.Printf("c[%d]=%s\n", i, v)
    }
} 

注意,数组是值类型

func main() {
    a := [3]int{1, 2, 3}
    b := a //把a拷贝一份给了b
    b[0] = 11
    fmt.Println(a)   //[1 2 3]
    fmt.Println(b)   //[11 2 3]

    a[1] = 22
    fmt.Println(a)   //[1 22 3]
    fmt.Println(b)   //[11 2 3]
} 

多维数组声明和初始化

func main() {
    var a [3][2]int
    fmt.Println(a)   // [[0 0] [0 0] [0 0]]

    a = [3][2]int{
        [2]int{1, 2},
        [2]int{3, 4}}
    a = [3][2]int{
        {1, 2},
        {3, 4}}
    fmt.Println(a)   // [[1 2] [3 4] [0 0]]

    b := [3][2]int{
        {1, 2},
        {3, 4},
    }
    fmt.Println(b)   // [[1 2] [3 4] [0 0]]

    //第一层可以用...,其它层不可以用
    c := [...][2]int{
        {1, 2},
        {3, 4},
    }
    fmt.Println(c)   //[[1 2] [3 4]]
} 

多维数组使用

func main() {
    b := [3][2]int{
        {1, 2},
        {3, 4},
    }
    fmt.Println(b[1][1])   // 4

    for i := 0; i < len(b); i++ {
        for j := 0; j < len(b[i]); j++{
            fmt.Printf("b[%d][%d]=%d\n", i, j, b[i][j])
        }
    }

    for i, v1 := range b {
        for j, v := range v1 {
            fmt.Printf("b[%d][%d]=%d\n", i, j, v)
        } 
    }
} 

练习题

1.求数组所有元素的和

func main() {
    // 求数组所有元素的和
    var a = [5]int{1, 3, 5, 7, 8}
    sum := 0
    for _,v := range a {
        sum += v
    }
    fmt.Printf("sum=%d\n", sum)
} 

2.找出数组中和为指定值的两个元素的下标,比如从数组[1,3,5,7,8]找出和为8的两个元素的下标分别为(0,3)和(1,2)

func main() {
    // 找出数组中和为指定值的两个元素的下标,比如从数组[1,3,5,7,8]找出和为8的两个元素的下标分别为(0,3)和(1,2)
    s := 8
    for i,v := range a {
        for j := i + 1; j < len(a); j++ {
            if v + a[j] == s {
                fmt.Printf("(%d,%d)\n", i, j)
            }
        }
    }

    for i,v := range a {
        other := s - v
        for j := i + 1; j < len(a); j++ {
            if i == j {
                continue
            }
            if other == a[j] {
                fmt.Printf("(%d,%d)\n", i, j)
            }
        }
    }
} 

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:Cici冬雪

查看原文:Golang——数组array

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

540 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传