07、数组

01、定义数组 和 数组类型说明

--数组定义:
    --存放元素的有容器
    --必须指定存放的元素的类型和容量(长度),也就是说数组是复合类型其准确的类型 == 长度 + 数据类型
    --数组类型 == 长度 + 数据类型
-数组长度固定,但是切片长度可变。因此数组使用的范围比较窄多用切片存储数据

--代码示例:这里主要是关于数组类型  和  如何获取变量类型演示
	var a1 [3]bool // true true false
	var a2 [4]bool // true false true false

	// 打印变量类型
	fmt.Printf("a1: %T  a2: %T\n", a1, a2)

***************  输出  ****************
a1: [3]bool  a2: [4]bool


--不同类型的数组之间不可相互赋值,即使数据类型一致长度不一致也不行
	var s1 [3]int
	var s2 [4]int
	s1 = s2
***************  输出  ****************
.\test.go:8:5: cannot use s2 (type [4]int) as type [3]int in assignment

--必须当数据类型一致,数据长度一致,数组之间才能相互赋值
	var s1 [3]int
	var s2 [3]int
	s1 = s2

02、数组初始化

--数组如果不初始化,初始值一般为0 0.0 flase等值

--代码示例如下:
	var s1 [3]int
	var b1 [2]bool
	fmt.Println(s1, b1)
******************  数组默认值  ********************
[0 0 0] [false false]
--数组初始化:

--代码示例如下:
	// 初始化方式1:少量数据直接赋值
	var a1 [3]bool
	a1 = [3]bool{true, true, true}
	fmt.Println(a1)

	// 初始化方式2:数组值非常多的时候,得数完个数才能给出数组长度是不方便的,因此直接使用[...]
	// 根据初始值推断数据长度
	a100 := [...]int{1, 2, 3, 4, 5, 6, 7, 312, 345, 456, 8756}
	fmt.Println(a100)

	// 初始方式3:定义数组长度,但是赋值部分数据其余全部按照默认值填充
	a3 := [5]int{1, 2}
	fmt.Println(a3)

	// 初始方式4:按照给定的索引进行初始化,这里给0 4位置进行赋值
	a4 := [5]int{0: 1, 4: 45}
	fmt.Println(a4)

03、数组的遍历

--两种遍历方式,代码示例如下:
	citys := [...]string{"beijing", "shanghai", "nanjing", "shenzhen", "changsha"}
	// 遍历方式1: 按照索引进行遍历
	for i := 0; i < len(citys); i++ {
		fmt.Println(citys[i])
	}

	// 遍历方式2: 按照for range进行遍历
	for i, v := range citys {
		fmt.Println(i, v)
	}

04、多维数组  定义 赋值 和 遍历

--定义 和 赋值:	
    // 初始数组
	var all [3][2]int

	// 数组赋值,记住,不能省略
	all = [3][2]int{
		[2]int{1, 2},
		[2]int{3, 4},
		[2]int{5, 6},
	}
	fmt.Println(all)

--遍历:for range
	// 多位数组的遍历
	for _, v := range all {
		for _, v1 := range v {
			fmt.Println(v, v1)
		}
	}

05、数组是值类型:复制以后两个数组之间占有独立的内存空间,修改不会相互影响

--代码示例如下:
	b1 := [3]int{
		1, 2, 3,
	}
	b2 := b1
	b2[0] = 100
	fmt.Println(b1, b2)

***************  输出结果  *****************
[1 2 3] [100 2 3]

06、数组练习题

--题目如下:
    --1、遍历数组元素并求和
    --2、取出元素中两个和为8的元素,并打印出来

	a1 := [...]int{1, 2, 3, 6, 7, 8}

	// 对a1中元素遍历求和
	sum := 0
	for _, v := range a1 {
		sum = sum + v
	}
	fmt.Println(sum)

	// 取出a1中两个和为8的元素
	for i, v := range a1 {
		for j, v1 := range a1 {
			if j > i {
				if v+v1 == 8 {
					fmt.Println(v, v1)
				}
			}
		}
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值