当前位置: 首页 > article >正文

go数据结构笔记

 常用数据结构

切片

定义int类型,大小为3 长度为10

切片的数据结构可以类比成ArrayList,具备动态扩容的数组

package main

import "fmt"

func main() {
	var numbers = make([]int, 3, 10) //切片类型为int 长度为3 容量为10

	printSlice(numbers)
}

func printSlice(x []int) {
	fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}

看下打印的数据

切片初始化不指定大小和容量

package main

import "fmt"

func main() {
	var numbers []int

	printSlice(numbers)

	if numbers == nil {
		fmt.Println("切片是空的")
	}
}

func printSlice(x []int) {
	fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}

打印

切片的截取

可以类比成String的subString

package main

import "fmt"

func main() {
   /* 创建切片 */
   numbers := []int{0,1,2,3,4,5,6,7,8}
   printSlice(numbers)

   /* 打印原始切片 */
   fmt.Println("numbers ==", numbers)

   /* 打印子切片从索引1(包含) 到索引4(不包含)*/
   fmt.Println("numbers[1:4] ==", numbers[1:4])

   /* 默认下限为 0*/
   fmt.Println("numbers[:3] ==", numbers[:3])

   /* 默认上限为 len(s)*/
   fmt.Println("numbers[4:] ==", numbers[4:])

   numbers1 := make([]int,0,5)
   printSlice(numbers1)

   /* 打印子切片从索引  0(包含) 到索引 2(不包含) */
   number2 := numbers[:2]
   printSlice(number2)

   /* 打印子切片从索引 2(包含) 到索引 5(不包含) */
   number3 := numbers[2:5]
   printSlice(number3)

}

func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

打印

切片的append() 和 copy() 函数

package main

import "fmt"

func main() {
   var numbers []int
   printSlice(numbers)

   /* 允许追加空切片 */
   numbers = append(numbers)
   printSlice(numbers)

   /* 向切片添加一个元素 */
   numbers = append(numbers, 1)
   printSlice(numbers)

   /* 同时添加多个元素 */
   numbers = append(numbers, 2,3,4)
   printSlice(numbers)

   /* 创建切片 numbers1 是之前切片的两倍容量*/
   numbers1 := make([]int, len(numbers), (cap(numbers))*2)

   /* 拷贝 numbers 的内容到 numbers1 */
   copy(numbers1,numbers)
   printSlice(numbers1)
}

func printSlice(x []int){
   fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

打印

map

这里可以类比成Java的Hashmap,同样不是线程安全的

package main

import (
	"fmt"
)

func main() {
	//第一种声明
	var test1 map[string]string
	//在使用map前,需要先make,make的作用就是给map分配数据空间
	test1 = make(map[string]string, 10) //key 和value均 string
	test1["one"] = "js"
	test1["two"] = "golang"
	test1["three"] = "java"
	fmt.Println(test1) //map[two:golang three:java one:js]

	//第二种声明
	test2 := make(map[string]string)
	test2["one"] = "js"
	test2["two"] = "golang"
	test2["three"] = "java"
	fmt.Println(test2) //map[one:js two:golang three:java]

	//第三种声明
	test3 := map[string]string{
		"one":   "js",
		"two":   "golang",
		"three": "java",
	}
	fmt.Println(test3) //map[one:js two:golang three:java]

	language := make(map[string]map[string]string)
	language["js"] = make(map[string]string, 2)
	language["js"]["id"] = "1"
	language["js"]["desc"] = "js是世界上最美的语言"
	language["golang"] = make(map[string]string, 2)
	language["golang"]["id"] = "2"
	language["golang"]["desc"] = "golang抗并发非常good"

	fmt.Println(language) //map[js:map[id:1 desc:js是世界上最美的语言] golang:map[id:2 desc:golang抗并发非常good]]

	//增删改查
	val, key := language["js"] //查找是否有js这个子元素
	if key {
		fmt.Println("%v", val)
	} else {
		fmt.Println("no")
	}

	language["js"]["id"] = "3"        //修改了js子元素的id值
	language["js"]["nickname"] = "测试" //增加js元素里的nickname值
	fmt.Println(language)
	delete(language, "js") //删除了js子元素
	fmt.Println(language)
}

打印

 参考

8小时转职Golang工程师(如果你想低成本学习Go语言)_哔哩哔哩_bilibili


http://www.kler.cn/a/588678.html

相关文章:

  • Kotlin知识体系(一) : Kotlin的五大基础语法特性
  • SpiderX:专为前端JS加密绕过设计的自动化工具
  • Leetcode-2272. Substring With Largest Variance [C++][Java]
  • c++学习系列----002.写文件
  • 【C语言】动态内存管理用realloc管理更灵活
  • DeepSeek + Excel:数据处理专家 具体步骤
  • 蓝桥杯:山
  • 基于强化学习的智能路径规划系统
  • 腾龙T2000边缘计算网关:开启智能物联新时代
  • Excel ScriptLab学习笔记
  • 判断是不是二叉搜索树(C++)
  • Selenium 自动化测试学习总结
  • 不像人做的题————十四届蓝桥杯省赛真题解析(上)A,B,C,D题解析
  • 【鸿蒙开发】Hi3861学习笔记- GPIO之继电器
  • 时序约束整理
  • 【sklearn 03】逻辑回归、决策树、支持向量机
  • 网页制作16-Javascipt时间特效の设置D-DAY倒计时
  • 【Node.js入门笔记5---fs文件信息与元数据】
  • 项目经历-笔记
  • perl的package中“Subroutine new redefined”问题