数组

数组保存特定数量的元素,不能增长或收缩。要声明保存数组的变量,需要在方括号([])中指定它所保存的元素数量,后跟数组所保存的元素类型。

要设置数组元素的值或稍后检索值,你需要一种方法来指定你指的是哪个元素。数组中的元素从0开始编号。一个元素的编号称为其索引。

package main

import (
	"fmt"
	"reflect"
)
func main() {
	var inas [10]int
	inas[9]=1
	fmt.Println(reflect.TypeOf(inas))
	fmt.Println(inas[1])
	fmt.Println(inas[9])
}

image-20201027095300850

初始化

与变量一样,当创建一个数组时,它所包含的所有值都初始化为该数组所保存类型的零值。所以默认情况下,一个int值数组用0填充:

然而,字符串的零值是一个空字符串,因此默认情况下,一个字符串值数组用空字符串填充:

创建数组时,它所包含的所有值都初始化为数组所保存类型的零值。

package main
import "fmt"
func main() {
	var ina [2]int
	fmt.Println(ina[1])
	var sta [2]string
	fmt.Println(":",sta[1])
}

image-20201027100321023


数组字面量

如果事先知道数组应该保存哪些值,可以使用数组字面量来初始化数组。数组字面量的开头与数组类型类似,其元素的数量将放在方括号中,后跟元素的类型。再后面跟着大括号,里面是每个元素应该具有的初始值列表。元素值应该用逗号分隔。

image-20201027102939283

  • 使用数组字面量初始化整个数组。

  • 使用数组字面量也允许使用:=进行短变量声明。

    package main
    import "fmt"
    func main() {
        var ina [9]int = [9]int{1,2,3}
        inb := [3]int{4,5}
    	fmt.Print(ina[1],inb[1])
    }

    image-20201027103116986


“fmt”包处理数组

当你只是想尝试调试代码时,不必逐个将数组元素传递给fmt包中的Println和其他函数。只需传递整个数组。fmt包中有为你做格式化和打印数组的逻辑。(fmt包还可以处理切片、映射和稍后将看到的其他数据结构。)

  • Printf和Sprintf函数使用的”%#v”动词,它将按照在Go代码中显示的方式格式化值。当用”%#v”格式化时,数组在结果中显示为Go数组字面量。

    package main
    import "fmt"
    func main() {
        var ina [9]int = [9]int{1,2,3}
    	fmt.Printf("%#v",ina)
    	fmt.Printf("%v",ina)
    }

    image-20201027103452967


在循环里访问数组元素

使用for循环来处理数组元素之类的操作。循环遍历数组中的索引,并使用循环变量访问当前索引处的元素。

package main
import "fmt"
func main() {
    var ina [3]int = [3]int{1,2,3}
	for i:=0;i< len(ina);i++ {
		fmt.Println(ina[i])
	}
}

image-20201027110608251


使用“for…range”安全遍历数组

处理数组中每个元素的一种更安全的方法是使用特殊的for…range循环。在range格式中,你提供了一个变量,该变量将保存每个元素的整数索引,另一个变量将保存元素本身的值,以及要循环的数组。循环将为数组中的每个元素运行一次,将元素的索引赋值给第一个变量,将元素的值赋值给第二个变量。你可以向循环块中添加代码来处理这些值。

image-20201027110831448

package main
func main() {
    var ina [3]int = [3]int{1,2,3}
	for i,v := range ina {
		print(i,v,"\n")
	}
}

image-20201027111121734


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

上一篇
函数 下一篇