Golang学习笔记_13——数组

一给  金牌会员 | 2024-12-23 18:34:09 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 809|帖子 809|积分 2427

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


  

数组

Go语言中的数组是一种具有固定长度、雷同类型元素的集合。数组的长度是数组类型的一部分,这意味着数组的长度在界说后是固定的,不能改变。
在Go语言中,数组的使用非常底子且重要,特别是在明白切片(slice)和映射(map)等更复杂的数据结构时。
1. 界说

  1. // 数组可以通过显式地指定长度和元素类型来定义
  2. var aar1 [5] int
  3. // 定义时直接初始化数组的元素
  4. var aar2 = [5]int{1, 2, 3, 4, 5}
  5. // 省略数组的长度,编译器会根据提供的初始化值的数量自动推断
  6. var aar3 = [...]int{1, 2, 3, 4}
复制代码
2. 访问和修改

  1. // 修改数组的值
  2. aar1[1] = 10
  3. // 访问数组的第三个元素
  4. value := aar[2]
复制代码
3. 多维数组

  1. var matrix [3][4]int
  2. matrix = [3][4]int{
  3.     {1, 2, 3, 4},
  4.     {5, 6, 7, 8},
  5.     {9, 10, 11, 12},
  6. }
  7. // 访问多维数组
  8. value2 := matrix[1][2]  // 访问第二行第三列的元素
复制代码
4. 计算数组长度

  1. length := len(matrix)
复制代码
5. 数组作为函数参数

将数组作为函数参数传递。传递的是数组的副本,因此函数内部对数组的修改不会影响外部的数组。
  1. func array_demo2(aar [5]int) {
  2.         arr := aar
  3.         for i := 0; i < len(arr); i++ {
  4.                 fmt.Println("Index:", i, "Value:", arr[i])
  5.         }
  6.         aar[2] = 100
  7. }
复制代码
测试方法
  1. func Test_array_demo2(t *testing.T) {
  2.         aarr := [...]int{1, 2, 3, 4, 5}
  3.         array_demo2(aarr)
  4.         fmt.Println(aarr)
  5. }
复制代码
输出结果
  1. === RUN   Test_array_demo2
  2. Index: 0 Value: 1
  3. Index: 1 Value: 2
  4. Index: 2 Value: 3
  5. Index: 3 Value: 4
  6. Index: 4 Value: 5
  7. [1 2 3 4 5]
  8. --- PASS: Test_array_demo2 (9.03s)
  9. PASS
复制代码
6. 遍历

  1. func array_demo3(aar [5]int) {
  2.         arr := aar
  3.         for i := 0; i < len(arr); i++ {
  4.                 fmt.Println("Index:", i, "Value:", arr[i])
  5.         }
  6.         for index, value := range arr {
  7.                 fmt.Println("Index:", index, "Value:", value)
  8.         }
  9. }
复制代码
测试方法
  1. func Test_array_demo3(t *testing.T) {
  2.         aar1 := [5]int{1, 2, 3, 4, 5}
  3.         type args struct {
  4.                 aar [5]int
  5.         }
  6.         tests := []struct {
  7.                 name string
  8.                 args args
  9.         }{
  10.                 {
  11.                         name: "1",
  12.                         args: args{aar: aar1},
  13.                 },
  14.         }
  15.         for _, tt := range tests {
  16.                 t.Run(tt.name, func(t *testing.T) {
  17.                         array_demo3(tt.args.aar)
  18.                 })
  19.         }
  20. }
复制代码
输出结果
  1. === RUN   Test_array_demo3
  2. === RUN   Test_array_demo3/1
  3. Index: 0 Value: 1
  4. Index: 1 Value: 2
  5. Index: 2 Value: 3
  6. Index: 3 Value: 4
  7. Index: 4 Value: 5
  8. Index: 0 Value: 1
  9. Index: 1 Value: 2
  10. Index: 2 Value: 3
  11. Index: 3 Value: 4
  12. Index: 4 Value: 5
  13. --- PASS: Test_array_demo3 (0.00s)
  14.     --- PASS: Test_array_demo3/1 (0.00s)
  15. PASS
复制代码
7. 数组的内存体现

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

  1. // array_demo.go 文件package array_demoimport "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) {
  2.         arr := aar
  3.         for i := 0; i < len(arr); i++ {
  4.                 fmt.Println("Index:", i, "Value:", arr[i])
  5.         }
  6.         aar[2] = 100
  7. }
  8. func array_demo3(aar [5]int) {
  9.         arr := aar
  10.         for i := 0; i < len(arr); i++ {
  11.                 fmt.Println("Index:", i, "Value:", arr[i])
  12.         }
  13.         for index, value := range arr {
  14.                 fmt.Println("Index:", index, "Value:", value)
  15.         }
  16. }
复制代码
  1. // array_demo_test.gopackage array_demoimport (        "fmt"        "testing")func Test_array_demo2(t *testing.T) {
  2.         aarr := [...]int{1, 2, 3, 4, 5}
  3.         array_demo2(aarr)
  4.         fmt.Println(aarr)
  5. }
  6. func Test_array_demo3(t *testing.T) {
  7.         aar1 := [5]int{1, 2, 3, 4, 5}
  8.         type args struct {
  9.                 aar [5]int
  10.         }
  11.         tests := []struct {
  12.                 name string
  13.                 args args
  14.         }{
  15.                 {
  16.                         name: "1",
  17.                         args: args{aar: aar1},
  18.                 },
  19.         }
  20.         for _, tt := range tests {
  21.                 t.Run(tt.name, func(t *testing.T) {
  22.                         array_demo3(tt.args.aar)
  23.                 })
  24.         }
  25. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

一给

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表