专业编程基础技术教程

网站首页 > 基础教程 正文

Go数组和切片及map

ccvgpt 2024-08-09 12:00:07 基础教程 8 ℃

Go数组

  • 数组是一个数据集合,常用於存储一系列用数字做索引的数据,在go语言中,要创建数组先声明一个数组变量,并指定其长度和数据类型
var array [2]string // 使用关键字var什么一个名为array的变量,将一个长度为2的数组赋给这个变量,这个数组的类型为字符串。

array[0] = "hello" // 数组赋值索引从0开始
array[1] = "world"
array[2] = "test" // 由于数组的长度为了2,无法给第三个元素赋值,因此这将导致编译错误


fmt.Println(array[0])  // 打印数组第一个元素
fmt.Println(array[1])  
fmt.Println(array)  // 打印数组的所有元素

 

Go切片

  • 在go语言中使用数组存在一定的局限性,无法在数组元素已经满足长度的数组中添加元素
  • go语言中切片比数组更灵活,可以在切片中添加和删除元素还可以复制切片中的元素,它保留了数组的完整性,又比数组使用起来更容易
var sliceString = make([]string, 2)  // 关键字var声明一个sliceString的变量,用Go内置函数make创建一个切片,第一个参数为数据类型,第二个参数为长度。
 
sliceString[0] = "hello" // 切片赋值
sliceString[1] = "world"

fmt.Println(sliceString[0])  // 打印切片第一个元素
fmt.Println(sliceString[1])
fmt.Println(sliceString)  // 打印切片所有元素

 
  • 在切片中添加元素
  • Go语言提供内置函数append来为切片添加元素,append会在必要时调整切片的长度。
  • 使用Go语言内置函数cap来查看切片的容量。
package main

import (
 "fmt"
)

func main(){
  var sliceString = make([]string, 2)
  sliceString[0] = "hello"
  sliceString[1] = "world"
  fmt.Printf("sliceString capacitance is %d\n", cap(sliceString))
  sliceString = append(sliceString, "Canman")
  fmt.Println(sliceString)
  fmt.Printf("sliceString capacitance is %d\n", cap(sliceString))
}

// sliceString capacitance is 2
// [hello world Canman]
// sliceString capacitance is 4

// 元素个数小于1024,先扩容2倍,切片扩容规则和你追加的元素个数有关,切片扩容和你匹配的操作系统分配的内存规格有关,定义的切片类型有关。
// 元素未扩容使用索引赋值给切片会引发容量不足的错误,所有最好使用append进行元素的添加。
  • 在切片中删除元素
  • 要从切片中删除元素,也可以使用内置函数append
package main

import "fmt"

func removeSliceString(s []string, i int) []string {
 return append(s[:i], s[i+1:]...)
}

func main() {
 var sliceString = make([]string, 2)
 sliceString[0] = "hello"
 sliceString[1] = "world"
 sliceString = append(sliceString, "Canman")
 fmt.Println(len(sliceString))
 fmt.Println(sliceString)
 sliceString = removeSliceString(sliceString, 1)
 fmt.Println(len(sliceString))
 fmt.Println(sliceString)
}

// 3
// [hello world Canman]
// 2
// [hello Canman]

 

复制切片中的元素

  • 复制切片的全部元素跟部分元素可使用内置函数copy,在复制切片中的元素前,必须再声明一个类型与该切片相同的切片,不能将字符串切片中的元素复制到整数切片中。
package main

import "fmt"


func main(){
   var sliceString = make([]string, 3)
   sliceString[0] = "hello"
   sliceString[1] = "world"
   var CopySliceString = make([]string, 2)
   copy(CopySliceString, sliceString)
   fmt.Println(CopySliceString)
}

 

Go映射(Map)

Go数组和切片及map

  • go中数组和切片可通过索引值访问的元素集合而映射是通过键来访问无序元素编组,映射在信息查找方面的效率非常高,因为可以直接通过键来检索数据。映射可以视为键-值对集合。
var players = make(map[string]int)

// 使用内置函数make创建一个映射,其键的数据类型为字符串,值的类型为整数

players["play1"] = 32 // 添加键值对,变量名后面的方括号为键,等号右边是要赋给键的整数值
players["play2"] = 33
players["play3"] = 26 

fmt.Println(players["play1"])  // 打印特定键对应的值
fmt.Println(players)  // 打印映射所有的值

 
  • 从映射中删除元素使用内置函数delete
var players = make(map[string]int)

players["play1"] = 22
players["play2"] = 23

delete(players, "play2")  //删除指定映射里面的键值

fmt.Println(players)

// map[play1:22]

 

Tags:

最近发表
标签列表