Golang - 数组


数组介绍

  • 定义时固定长度, 不可变
  • 元素均为同一数据类型, 且可变
  • 值类型

数组的使用

创建

package main

import "fmt"

func main() {
	// 先声明数组, 需要确定数组长度, 元素类型
	var (
		arrayA [3]int
		arrayB [5]int
	)
	// 初始化
	arrayA = [3]int{1, 2, 3}
	arrayB = [5]int{10, 9, 8} // 可少放, 默认补 0
	fmt.Println(arrayA, arrayB)

	// 声明并初始化
	var arrayC = [3]string{"bj", "sh", "sz"}
	fmt.Println(arrayC)

	// 简短声明
	arrayC2 := [3]string{"bj", "sh", "sz"}
	fmt.Println(arrayC2)

	// ... 由编译器确定数组长度
	arrayD := [...]int{1, 32, 3, 14, 125, 1312, 31231}
	fmt.Printf("%[1]T, %[1]v\n", arrayD)

	// 根据索引值初始化
	arrayE := [5]int{3: 100} // 索引为3的元素赋值为100, 若使用..., 则索引就是最大长度
	fmt.Println(arrayE)
}


取值

// 根据索引取值

arrayA[0]

遍历

package main

import "fmt"

func main() {
	arrayE := [5]int{3: 100}
	
	// for循环遍历
	for i := 0; i < len(arrayE); i++ {
		fmt.Println(arrayE[i])
	}

	// for range 遍历
	for _, v := range arrayE {
		fmt.Println(v)
	}
}

练习

z := [...]int{1,3,5,7,8}

// 1. 求元素和
sum := 0
for _,v := range z {
	sum += v
}

// 2. 求和为8的两个元素的索引
for k1, v1 := range z {
	for k2, v2 := range z[k1:] {
		if v1+v2 == 8 {
			fmt.Println(k1, k1+k2)
		}
	}
}

多维数组

创建

package main

import "fmt"

func main() {

	// 先声明, 后赋值
	var a [3][2]int
	a = [3][2]int{
		[2]int{1, 2},
		[2]int{3, 4},
	}
	fmt.Println(a) // 结果为 [[1 2] [3 4] [0 0]], 最后一个默认用0补齐

	// 声明同时完成初始化
	var b = [3][2]int{
		[2]int{1, 2},
		[2]int{3, 4},
	}
	fmt.Println(b) // 结果为 [[1 2] [3 4] [0 0]], 最后一个默认用0补齐

	// 简短声明
	c := [3][3]int{
		[3]int{1, 2, 3},
		[3]int{2, 3, 4},
	}
	fmt.Println(c)
}


关于…的使用

// 在多维数组中, 只有最外层能使用...
a := [...][2]int{
	{1,2},
	{3,4},
	{5,6}, // 可以写多个, 由编译器确认数量
}

取值

// 根据索引取值

arrayA[0][1]

遍历

package main

import "fmt"

func main() {

	// for循环遍历每个元素
	for i := 0; i < len(c); i++ {
		for j := 0; j < len(c[i]); j++ {
			fmt.Println(c[i][j])
		}
	}

	// for range 遍历每个元素
	for _, v1 := range c {
		for _, v2 := range v1 {
			fmt.Println(v2)
		}
	}
}


验证: 数组是值类型

package main

import "fmt"

func main() {
	// 可以理解为值类型存的是指, 引用类型存的是指针

	// 创建一个数组
	m := [1]int{1} 

	// 将数组进行复制
	n := m         

	// 改变其中一个的元素, 如果 m 和 n 的结果不同则为值类型   
	m[0] = 100           // 修改n的元素, 修改m的元素效果相同
	fmt.Println(m, n)    // 结果为[1] [100]
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值