Golang入门教程8:数组大观 -- 程序世界的数据之舞

59 阅读5分钟

生活中的数组

数组是计算机科学中的一种数据结构,但其实在日常生活中,我们经常会遇到类似数组的概念,用来组织和管理各种信息。以下是一些生活中常见的数组应用:

  1. 购物清单: 想象一下你去超市购物,你可能会列一个购物清单,上面按顺序罗列了你需要购买的物品,就像数组中的元素一样。

  2. 图书馆书架: 图书馆通常会将书籍按照分类和编号的方式放置在书架上,形成一个有序的集合,类似于数组的结构。

  3. 座位表: 在婚礼、宴会或会议上,座位表往往以数组或类似数组的方式组织,方便管理每位嘉宾的座位位置。

  4. 火车、飞机座位排布: 车厢和飞机座位通常按照行和列的方式排布,就像一个二维数组,方便人们找到自己的座位。

  5. 学生成绩册: 学校的成绩册通常以学生的学号或姓名的顺序排列,形成一个类似数组的结构,方便查阅学生成绩。

  6. 体育比赛成绩: 体育比赛中的各种数据,比如运动员的成绩、名次等,也可以组织成数组,以便更方便地进行分析和管理。

  7. 音乐播放列表: 在音乐播放器中,你可以创建一个播放列表,其中包含按照你的喜好或心情排列的歌曲,就像一个音乐数组。

  8. 电影院座位: 在购票时,电影院的座位往往以数组的形式展示,你可以选择一个具体的位置进行购票。

这些例子表明,虽然我们在生活中并没有直接使用计算机科学中的术语,但我们经常使用类似数组的结构来组织和管理信息,使得事物更加有序和易于管理。

Golang中的数组

数组是一种数据结构,用于存储相同类型的元素集合。这些元素在内存中是连续存储的,并通过索引或下标来访问。数组是一种简单而强大的数据结构,常用于在程序中存储和操作一系列相关的数据。

以下是关于数组的一些核心概念:

  1. 元素(Element): 数组中的每个数据项称为元素。元素可以是任何数据类型,如整数、浮点数、字符等。

  2. 索引(Index): 每个元素在数组中都有一个唯一的索引或下标,用于标识元素在数组中的位置。索引通常从0开始递增,例如,第一个元素的索引是0,第二个是1,以此类推。

  3. 长度(Length): 数组的长度是指数组中包含的元素数量。长度确定了数组的大小,一旦数组被创建,其长度通常是固定的。

  4. 类型(Type): 数组是一个固定类型的数据结构,即所有元素都必须是相同类型。例如,整数数组只能包含整数元素。

  5. 连续存储(Contiguous Storage): 数组中的元素在内存中是连续存储的,这意味着它们的地址是相邻的。这种特性使得通过索引快速访问数组元素成为可能。

  6. 随机访问(Random Access): 由于元素在内存中的连续存储,数组支持直接根据索引随机访问元素。这使得数组在查找、插入和删除元素时具有较高的效率。

  7. 固定大小(Fixed Size): 数组一旦被创建,其大小通常是固定的,不可动态改变。如果需要更灵活的大小,可能需要使用其他数据结构,如切片。

下面是一个简单的示例,演示了一个整数数组的创建和基本操作:

package main

import "fmt"

func main() {
    // 创建一个包含5个整数的数组
    var numbers [5]int

    // 给数组赋值
    numbers[0] = 1
    numbers[1] = 2
    numbers[2] = 3
    numbers[3] = 4
    numbers[4] = 5

    // 访问数组元素并打印
    fmt.Println("First element:", numbers[0])
    fmt.Println("Second element:", numbers[1])

    // 数组长度
    fmt.Println("Array length:", len(numbers))
}

在这个例子中,我们创建了一个包含5个整数的数组,然后为数组赋值,并通过索引访问和打印数组元素。

实践

这段Go代码演示了数组的基本操作和多维数组的创建与使用。下面是对代码的解释:

  1. 创建数组 a

    var a [5]int
    fmt.Println("emp:", a)
    

    创建一个长度为5的整数数组 a,并初始化为该类型的零值(整数类型的零值为0)。打印结果为 emp: [0 0 0 0 0]

  2. 设置和获取数组元素:

    a[4] = 100
    fmt.Println("set:", a)
    fmt.Println("get:", a[4])
    

    设置数组 a 的第5个元素为100,并打印整个数组和获取的元素值。打印结果为 set: [0 0 0 0 100]get: 100

  3. 获取数组长度:

    fmt.Println("len:", len(a))
    

    打印数组 a 的长度,即5。

  4. 创建并初始化数组 b

    b := [5]int{1, 2, 3, 4, 5}
    fmt.Println("dcl:", b)
    

    使用短声明语法创建并初始化数组 b,并打印该数组。打印结果为 dcl: [1 2 3 4 5]

  5. 创建二维数组 twoD

    var twoD [2][3]int
    for i := 0; i < 2; i++ {
        for j := 0; j < 3; j++ {
            twoD[i][j] = i + j
        }
    }
    fmt.Println("2d:", twoD)
    

    创建一个2行3列的二维整数数组 twoD,并使用嵌套循环为每个元素赋值。打印结果为 2d: [[0 1 2] [1 2 3]],表示二维数组的内容。

下面的代码可以敲一敲,感受一下:

package main

import "fmt"

func main() {
   var a [5]int
   fmt.Println("emp:", a)

   a[4] = 100
   fmt.Println("set:", a)
   fmt.Println("get:", a[4])

   fmt.Println("len:", len(a))

   b := [5]int{1, 2, 3, 4, 5}
   fmt.Println("dcl:", b)

   var twoD [2][3]int
   for i := 0; i < 2; i++ {
      for j := 0; j < 3; j++ {
         twoD[i][j] = i + j
      }
   }
   fmt.Println("2d:", twoD)
}