GO语言学习——复合数据类型 数组

复合数据类型

数组

数组定义:

var 数组变量名 [元素数量]T

数组的初始化

数组的遍历

多维数组

数组是值类型

数组是值类型,赋值和传参会复制整个数组。因此改变副本的值,不会改变本身的值。

  1. 数组支持 “==“、”!=” 操作符,因为内存总是被初始化过的。
  2. [n]T表示指针数组,[n]T表示数组指针 。
点击查看代码
    package main
    
    import "fmt"
    
    // 数组
    
    // 存放元素的容器
    // 必须指定存放的元素的类型和容量(长度)
    // 数组的长度是数组类型的一部分
    
    func main(){
    	var a1 [3]bool  // [true false true]
    	var a2 [4]bool  // [true true false false]
    
    	fmt.Printf("a1:%T a2:%T\n", a1, a2)
    
    	// 数组的初始化
    	// 如果不初始化:默认元素都是零值(布尔值:false,整型和浮点型都是0,字符串:"")
    	fmt.Println(a1, a2)
    	// 1. 初始化方式1
    	a1 = [3]bool{true, true, true}
    	fmt.Println(a1)
    	// 2. 初始化方式2 根据初始值自动推断数组的长度是多少
    	// a10 := [10]int{0,1,2,3,4,5,6,7,8,9}
    	a10 := [...]int{0,1,2,3,4,5,6,7,8,9}
    	fmt.Println(a10)
    	// 3. 初始化方式3 根据索引来初始化
    	// a3 := [5]int{1,2}
    	a3 := [5]int{0:1,4:2}
    	fmt.Println(a3)
    
    	// 数组的遍历
    	citys := [...]string{"北京", "上海", "深圳"} // 索引:0-2 citys[0],citys[1],citys[2]
    	// 1. 根据索引遍历
    	for i := 0; i < len(citys);i++{
    		fmt.Println(citys[i])
    	}
    	// 2. for range遍历
    	for i, v := range citys {
    		fmt.Println(i, v)
    	}
    
    	// 多维数组
    	// [[1,2][3,4][5,6]]
    	var a11 [3][2]int
    	a11 = [3][2]int{
    		[2]int{1, 2},
    		[2]int{3, 4},
    		[2]int{5, 6},
    	}
    	fmt.Println(a11)
    
    	// 多维数组的遍历
    	for _, v1 := range a11 {
    		fmt.Println(v1)
    		for _, v2 := range v1 {
    			fmt.Println(v2)
    		}
    	}
    
    	// 数组是值类型
    	b1 := [3]int{1,2,3} // [1 2 3]
    	b2 := b1 			// [1 2 3] Ctrl+C Ctrl+V => 把world文档从文件夹a拷贝到文件夹b
    	b2[0] = 100 		// b2:[100 2 3]
    	fmt.Println(b1, b2) // b1:?
    }
  • 练习
点击查看代码
    package main
    
    import "fmt"
    
    // 求数组[1, 3, 5, 7, 8]所有元素的和
    // 找出数组中和为指定值的两个元素的下标,比如从数组[1, 3, 5, 7, 8]中找出和为8的两个元素的下标分别为(0,3)和(1,2)。
    
    func main(){
    	// 1. 求数组[1, 3, 5, 7, 8]所有元素的和
    	a1 := [...]int{1,3,5,7,8}
    	// 把数组中的每一个元素遍历出来,累加到一个sum变量就可以了
    	sum := 0
    	for _, v := range a1{
    		sum = sum + v
    	}
    	fmt.Println(sum)
    
    	// 找出和为8的两个元素的下标分别为(0,3)和(1,2)
    	// 定义两个for循环,外层的从第一个开始遍历
    	// 内层的for循环从外层后面的那个开始找
    	// 它们两个数的和为8
    	for i:=0;i<len(a1);i++{
    		for j:=i + 1;j<len(a1);j++{
    			if a1[i] +a1[j] == 8{
    				fmt.Printf("(%d, %d)\n", i, j)
    			}
    		}
    	}
    }
posted @ 2022-04-26 23:15  寻月隐君  阅读(57)  评论(0编辑  收藏  举报