首页 > 其他分享 >Golang学习笔记_13——数组

Golang学习笔记_13——数组

时间:2024-12-21 21:30:22浏览次数:5  
标签:Index 13 int Value Golang 笔记 数组 aar array

Golang学习笔记_10——Switch
Golang学习笔记_11——指针
Golang学习笔记_12——结构体


文章目录


数组

Go语言中的数组是一种具有固定长度、相同类型元素的集合。数组的长度是数组类型的一部分,这意味着数组的长度在定义后是固定的,不能改变。

在Go语言中,数组的使用非常基础且重要,特别是在理解切片(slice)和映射(map)等更复杂的数据结构时。

1. 定义

// 数组可以通过显式地指定长度和元素类型来定义
var aar1 [5] int

// 定义时直接初始化数组的元素
var aar2 = [5]int{1, 2, 3, 4, 5}

// 省略数组的长度,编译器会根据提供的初始化值的数量自动推断
var aar3 = [...]int{1, 2, 3, 4}

2. 访问和修改

// 修改数组的值
aar1[1] = 10

// 访问数组的第三个元素
value := aar[2]

3. 多维数组

var matrix [3][4]int
matrix = [3][4]int{
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12},
}

// 访问多维数组
value2 := matrix[1][2]  // 访问第二行第三列的元素

4. 计算数组长度

length := len(matrix)

5. 数组作为函数参数

将数组作为函数参数传递。传递的是数组的副本,因此函数内部对数组的修改不会影响外部的数组。

func array_demo2(aar [5]int) {
	arr := aar
	for i := 0; i < len(arr); i++ {
		fmt.Println("Index:", i, "Value:", arr[i])
	}
	aar[2] = 100
}

测试方法

func Test_array_demo2(t *testing.T) {
	aarr := [...]int{1, 2, 3, 4, 5}
	array_demo2(aarr)
	fmt.Println(aarr)
}

输出结果

=== RUN   Test_array_demo2
Index: 0 Value: 1
Index: 1 Value: 2
Index: 2 Value: 3
Index: 3 Value: 4
Index: 4 Value: 5
[1 2 3 4 5]
--- PASS: Test_array_demo2 (9.03s)
PASS

6. 遍历

func array_demo3(aar [5]int) {
	arr := aar
	for i := 0; i < len(arr); i++ {
		fmt.Println("Index:", i, "Value:", arr[i])
	}

	for index, value := range arr {
		fmt.Println("Index:", index, "Value:", value)
	}
}

测试方法

func Test_array_demo3(t *testing.T) {
	aar1 := [5]int{1, 2, 3, 4, 5}

	type args struct {
		aar [5]int
	}
	tests := []struct {
		name string
		args args
	}{
		{
			name: "1",
			args: args{aar: aar1},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			array_demo3(tt.args.aar)
		})
	}
}

输出结果

=== RUN   Test_array_demo3
=== RUN   Test_array_demo3/1
Index: 0 Value: 1
Index: 1 Value: 2
Index: 2 Value: 3
Index: 3 Value: 4
Index: 4 Value: 5
Index: 0 Value: 1
Index: 1 Value: 2
Index: 2 Value: 3
Index: 3 Value: 4
Index: 4 Value: 5
--- PASS: Test_array_demo3 (0.00s)
    --- PASS: Test_array_demo3/1 (0.00s)
PASS

7. 数组的内存表示

数组在内存中是连续存储的,这意味着数组访问速度非常快。但是,数组的长度是其类型的一部分,因此不同长度的数组是不同类型,不能相互赋值。

源码

// array_demo.go 文件

package array_demo

import "fmt"

func array_demo1() {
	// 数组可以通过显式地指定长度和元素类型来定义
	var aar1 [5]int

	// 定义时直接初始化数组的元素
	var aar2 = [5]int{1, 2, 3, 4, 5}

	// 省略数组的长度,编译器会根据提供的初始化值的数量自动推断
	var aar3 = [...]int{1, 2, 3, 4}

	// 修改数组的值
	aar1[1] = 10

	// 访问数组的第三个元素
	value := aar2[2]

	fmt.Println(aar3)
	fmt.Printf("aar2[2] value is %d\n", value)

	var matrix [3][4]int
	matrix = [3][4]int{
		{1, 2, 3, 4},
		{5, 6, 7, 8},
		{9, 10, 11, 12},
	}

	// 访问多维数组
	value2 := matrix[1][2] // 访问第二行第三列的元素
	fmt.Println(value2)

}

func array_demo2(aar [5]int) {
	arr := aar
	for i := 0; i < len(arr); i++ {
		fmt.Println("Index:", i, "Value:", arr[i])
	}
	aar[2] = 100
}

func array_demo3(aar [5]int) {
	arr := aar
	for i := 0; i < len(arr); i++ {
		fmt.Println("Index:", i, "Value:", arr[i])
	}

	for index, value := range arr {
		fmt.Println("Index:", index, "Value:", value)
	}
}

// array_demo_test.go
package array_demo

import (
	"fmt"
	"testing"
)

func Test_array_demo2(t *testing.T) {
	aarr := [...]int{1, 2, 3, 4, 5}
	array_demo2(aarr)
	fmt.Println(aarr)
}

func Test_array_demo3(t *testing.T) {
	aar1 := [5]int{1, 2, 3, 4, 5}

	type args struct {
		aar [5]int
	}
	tests := []struct {
		name string
		args args
	}{
		{
			name: "1",
			args: args{aar: aar1},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			array_demo3(tt.args.aar)
		})
	}
}

标签:Index,13,int,Value,Golang,笔记,数组,aar,array
From: https://blog.csdn.net/LuckyLay/article/details/144559330

相关文章

  • Golang学习笔记_14——切片
    Golang学习笔记_11——指针Golang学习笔记_12——结构体Golang学习笔记_13——数组文章目录切片1.定义2.创建3.基本操作4.动态性5.子切片6.数组和切片7.注意8.高级用法源码切片Go语言中的切片(slice)是一种非常强大且灵活的数据结构,它基于数组,但提供了......
  • Java学习笔记
    面向过程小知识点基本类型变量和引用类型变量局部变量和成员变量成员变量分为:静态成员变量和实例成员变量staticfinal修饰的成员变量称为常量(宏替换)多态使用父类类型的引用指向子类的对象该引用只能调用父类中定义的方法和变量如果子类中重写了父类中的一个方法,那么在调......
  • Redis篇-13--数据结构篇5--List内存模型(LinkedList,zipList,quicklist,Listpack,内存对齐,
    Redis的List(列表)数据类型是一个双向链表,允许从两端高效地插入和删除元素。为了提高性能和内存利用率,Redis对List进行了多种优化。特别是在Redis3.2版本中引入的quicklist结构,和Redis6.2版本中引入Listpack结构(替代之前的ziplist压缩列表),逐步提升List的性能。简单概括如下......
  • 课件10-13
    1面向对象(上)1,•类:封装对象属性(数据抽象)和方法(行为抽象)的载体;•对象:类抽象出来的一个实例。2,3,类对象只有一个,而实例对象可以有多个4,如果类中存在相同名称的类属性与实例属性,则通过实例对象只能访问实例属性5,构造方法在创建实例对象时被自动调用和执行析构方法一般用来......
  • Golang学习历程【第四篇 运算符&流程控制】
    Golang学习历程【第四篇运算符&流程控制】1.运算符1.1算术运算符1.2关系运算符1.3逻辑运算符1.4赋值运算符1.5其他运算符2.二进制运算3.流程控制3.1条件表达式if3.2for循环3.3forrange(键值循环)3.4switch...case3.5break,continue,goto1.运算符1.......
  • 2024-2025-1 20241413 《计算机基础与程序设计》 第十三周学习总结
    |班级链接|https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP||----|----|----||作业要求|https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13||----|----|----|教材学习内容总结《C语言程序设计》第12章结构体定义:结构体是一种用户自定......
  • Linux学习笔记(二) vi/vim快速入门
    Linux系统会内置vi文本编辑器。vim具有程序编辑的能力,可以看作是vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。下面将介绍:1.vim打开或创建文件的方法。2.vim的三种工作模式。3.v......
  • 【LTspice学习笔记】滤波电路设计
             本文是一个大三自动化专业本科生就无源/有源滤波器电路相关仿真设计的实验学习与记录过程,并对滤波器的一些原理特性以及亚诺德半导体公司开发的滤波器设计工具做简单介绍。一、设计要求(1)设计无源低通滤波器,其截止频率为482KHZ左右.(2) 设计N阶有源滤波器,......
  • 莫队 学习笔记
    阅前声明题单为方便,题目链接均在洛谷。要用桶的时候请尽量不要使用map或者un_map,会造成不必要的TLE。普通莫队当一个区间问题,可以由\([l,r]\)转移到\([l\pm1,r]\)和\([l,r\pm1]\),且添加、删除都可以已很快的时间完成时,我们可以使用莫队算法。我们先将询问离线下......
  • 学期:2024-2025-1 学号:20241303 《计算机基础与程序设计》第十三周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第十三周作业)这个作业的目标<写上具体方面>加入云班课,参考本周学习资源;自学教材《C语言程序设计》第12章并完......