Golang基础(3):数组,切片和字典

一:数组

数组是一个具有相同类型元素,固定长度的有序集合,一般定义如下:
var x [5]int
表示数组是一个整数型数组,长度为5
数组的几种定义方式

a: var来定义数组,然后依次赋值

package main

import "fmt"

func main() {
    var x [4]int
    x[0] = 1
    x[1] = 12
    x[2] = 4
    x[3] = 19
    var sum int
    for _, elem := range x {
        sum += elem
    }
    fmt.Println(sum)
    /**
    我们用range这个go语言内置的方法来遍历数组,其实range也可以用在切片和字典上面
    当你对一个返回值不感兴趣时候,可以用下划线 _ 来忽略这个值
    **/
}

 

b: 第二种定义方法

package main

import "fmt"
func main() {
    var x = [4]int{1, 12, 4}
    x[3] = 19
    var sum int
    for _, i := range x {
        sum += i
    }
    fmt.Println(sum)
}

 

c: 第三种定义

//如果我们不能显示知道数组长度,也可以用 ... 来代替长度

func main() {
    var x = [...]string{
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",    // 这里最后如果没有逗号,那么西面的大括号{要紧挨这个Friday,注意
    }
    for _, day := range x {
        fmt.Println(day)
    }
}

 

二:切片

上面数组是有固定长度的有序集合,也就是说一段数组长度定义了,你也无法向里面添加元素了。
当元素个数不确定时候,我们又想添加元素进去,这时候数组就不合适了,这时候切片slice登场了
切片和数组类似,切片有一个优点,那就是切片长度是可变的

a: make定义切片

package main

import "fmt"

func main() {
    var arr1 = make([]int, 4)
    fmt.Println("Capcity:", cap(arr1), "Length:", len(arr1))

    var arr2 = make([]int, 5, 10)
    fmt.Println("Captity:", cap(arr2), "Length:", len(arr2))

    for i := 0; i < len(arr1); i++ {
        arr1[i] = i
    }
    fmt.Println(arr1)

    for i := 0; i < len(arr2); i++ {
        arr2[i] = i
    }
    fmt.Println(arr2)
}

 

用make定义切片
1:只指定长度,这个时候切片的容量和长度相同
2:另外一种同时指定切片的容量和长度

b: 用数组定义切片

package main

import "fmt"

func main() {
    var arr1 = [4]int{1, 23, 2, 3}
    var s1 = arr1[1:2]
    var s2 = arr1[:3]
    var s3 = arr1[:]
    fmt.Println(s1, s2, s3)
}

 

c: append给切片追加元素

package main

import "fmt"

func main() {
    var arr1 = make([]int, 4, 10)
    for i := 0; i < len(arr1); i++ {
        arr1[i] = i
    }

    arr1 = append(arr1, 1, 2, 5, 30)
    fmt.Println("Capacity: ", cap(arr1), "Length:", len(arr1))
    fmt.Println(arr1)
}

 

三:字典

字典是一个无序的,键值对的集合

a: 第一种定义:

package main

import "fmt"

func main() {
    var x = map[string]string{
        "A": "apple",
        "B": "banana",
        "O": "orange",
        "P": "pear",
    }
    for key, val := range x {
        fmt.Println("key:", key, "val:", val)
    }
}

 

b: 第二种make定义

package main

import "fmt"

func main() {
    var x map[string]string
    x = make(map[string]string)
       //上面的2行还可以合成一行 x:=make(map[string]string)
    x["A"] = "apple"
    x["B"] = "banana"
    x["O"] = "orange"
    x["P"] = "pear"

    for key, val := range x {
        fmt.Println("key:", key, "val:", val)
    }
}

 

posted @ 2016-08-21 21:59  九卷  阅读(546)  评论(0编辑  收藏  举报