Go - 【字符串,数组,哈希表】常用操作
一. 字符串
- 字符串长度:
s := "hello"
l := len(s)
fmt.Println(l) // 输出 5
- 遍历字符串:
s := "hello"
for i, c := range s {fmt.Printf("%d:%c ", i, c)
}
// 输出:0:h 1:e 2:l 3:l 4:ofor i := 0; i < len(s); i ++ {fmt.Printf("%s ", s[i])
}
- 字符串比较:
s1 := "hello"
s2 := "world"
if s1 == s2 {fmt.Println("equal")
} else {fmt.Println("not equal")
}
// 输出 not equal
在这里插入代码片
- 拼接字符串:
s1 := "hello"
s2 := "world"
s3 := s1 + " " + s2
fmt.Println(s3) // 输出 hello world
- 字符串切割:
s := "a,b,c,d"
parts := strings.Split(s, ",")
for _, p := range parts {fmt.Println(p)
}
// 输出:
// a
// b
// c
// d
- 字符串替换:
s := "hello world"
s = strings.Replace(s, "world", "go", -1)
fmt.Println(s) // 输出 hello go
- 字符串查找:
s := "hello world"
idx := strings.Index(s, "world")
fmt.Println(idx) // 输出 6
- 字符串截取:
s := "hello world"
substr := s[0:5]
fmt.Println(substr) // 输出 hello
- 字符串转换:
s := "123"
n, err := strconv.Atoi(s)
if err != nil {fmt.Println(err)
} else {fmt.Printf("n=%d, type=%T\n", n, n)// 输出 n=123, type=int
}s = strconv.Itoa(n)
fmt.Printf("s=%s, type=%T\n", s, s)
// 输出 s=123, type=string
- 字符串格式化:
name := "Tom"
age := 18
s := fmt.Sprintf("name=%s, age=%d", name, age)
fmt.Println(s) // 输出 name=Tom, age=18
- 判断字符时候在字符串当中
import "strings"func contains(s string, c byte) bool {return strings.ContainsRune(s, rune(c))
}func index(s string, c byte) int {return strings.IndexByte(s, c)
}// contains函数使用了strings包的ContainsRune函数,该函数可以判断一个字符是否在字符串中。
// index函数使用了strings包的IndexByte函数,该函数可以返回字符在字符串中的位置。
- 排序
package mainimport ("fmt""sort"
)func main() {strSlice := []string{"abc", "aaa", "bce", "bcd"}// 正序排序sort.Strings(strSlice)fmt.Println("正序:", strSlice)// 反序排序sort.Sort(sort.Reverse(sort.StringSlice(strSlice)))fmt.Println("反序:", strSlice)
}
二. 数组 - 列表
- 创建列表:
myList := []int{1, 2, 3, 4, 5}
- 获取列表长度:
length := len(myList) // 等于 5
- 访问列表元素:
firstElement := myList[0] // 等于 1
lastElement := myList[len(myList)-1] // 等于 5
sublist := myList[1:3] // 等于 [2,3]
- 修改列表元素:
myList[0] = 10 // 现在 myList 等于 [10, 2, 3, 4, 5]
- 添加元素:
myList = append(myList, 6) // 现在 myList 等于 [10, 2, 3, 4, 5, 6]
myList = append(myList, 7, 8) // 现在 myList 等于 [10, 2, 3, 4, 5, 6, 7, 8]
- 删除元素:
myList = append(myList[:0], myList[1:]...) // 现在 myList 等于 [2, 3, 4, 5, 6, 7, 8]
myList = append(myList[:2], myList[3:]...) // 从列表中删除第 3 个元素,现在 myList 等于 [2, 3, 5, 6, 7, 8]
- 检查元素是否在列表中:
for _, element := range myList {if element == 3 {fmt.Println("3 在列表中")}
}
- 列表排序:
sort.Ints(myList) // 现在 myList 等于 [2, 3, 5, 6, 7, 8]
sort.Sort(sort.Reverse(sort.IntSlice(myList))) // 现在 myList 等于 [8, 7, 6, 5, 3, 2]
- 合并列表:
newList := append(myList, []int{9, 10}...) // 等于 [2, 3, 5, 6, 7, 8, 9, 10]
- 列表复制:
copyOfList := make([]int, len(myList))
copy(copyOfList, myList) // 等于 [2, 3, 5, 6, 7, 8]
三. 哈希表 - 字典
- 创建哈希表:
myMap := make(map[string]int)
- 在哈希表中设置键值:
myMap["apple"] = 1
myMap["banana"] = 2
myMap["orange"] = 3
- 从哈希表中获取键值:
value := myMap["apple"] // 等于 1
Go
的map
数据类型没有类似Python
中的get()
方法,但可以通过访问哈希表中的值及其存在状态的方式来实现相似的功能。
我们可以使用以下代码来获取键为 “apple” 的值:
value, exists := myMap["apple"]
为了实现类似Python中的get()方法的功能,我们可以将代码向下修改:
func getValue(myMap map[string]int, key string, defaultValue int) int {if value, exists := myMap[key]; exists {return value}return defaultValue
}value := getValue(myMap, "apple", 0)
- 检查键是否在哈希表中:
if _, ok := myMap["apple"]; ok {fmt.Println("apple 在哈希表中")
}
- 删除键值:
delete(myMap, "apple") // 从哈希表中删除键值 "apple"
- 获取哈希表长度:
length := len(myMap)
- 迭代哈希表中的键值对:
for key, value := range myMap {fmt.Printf("key: %s, value: %d\n", key, value)
}
- 判断哈希表是否为空:
if len(myMap) == 0 {fmt.Println("哈希表为空")
}
- 创建和初始化哈希表:
myMap := map[string]int{"apple": 1,"banana": 2,"orange": 3,
}
- 复制哈希表:
copyOfMap := make(map[string]int)
for key, value := range myMap {copyOfMap[key] = value
}
- 判断键是否存在哈希表中
func main() {dict := map[string]int{"foo": 1,"bar": 2,"baz": 3,}// 判断 "foo" 是否在字典中if _, ok := dict["foo"]; ok {fmt.Println("found foo")} else {fmt.Println("not found foo")}// 判断 "qux" 是否在字典中if _, ok := dict["qux"]; ok {fmt.Println("found qux")} else {fmt.Println("not found qux")}
}// 如果dict字典中存在"foo"键,则输出"found foo",否则输出"not found foo"。
// 同理,如果dict字典中不存在"qux"键,则输出"not found qux"。
- 字典排序
使用 sort.Slice 函数对 map 的键或值进行排序
package mainimport ("fmt""sort"
)func main() {dict := map[string]int{"foo": 1,"bar": 2,"baz": 3,}keys := make([]string, 0, len(dict))for k := range dict {keys = append(keys, k)}sort.Slice(keys, func(i, j int) bool {return keys[i] < keys[j]})for _, k := range keys {fmt.Printf("%v: %v\n", k, dict[k])}
}
先创建一个字符串类型的列表 keys,用于存储 map 中的键。然后,使用 range 遍历 dict,将其中的键添加到 keys 列表中。接着,使用 sort.Slice 函数对 keys 列表进行排序,排序函数使用匿名函数的方式进行定义,在该函数中,使用 < 符号来比较两个键的大小。最后,使用遍历的方式输出排序后的键和相应的值。
以上就是关于Go - 【字符串,数组,哈希表】常用操作的基本使用,希望对你有所帮助!
相关文章:
Go - 【字符串,数组,哈希表】常用操作
一. 字符串 字符串长度: s : "hello" l : len(s) fmt.Println(l) // 输出 5遍历字符串: s : "hello" for i, c : range s {fmt.Printf("%d:%c ", i, c) } // 输出:0:h 1:e 2:l 3:l 4:ofor i : 0; i < le…...

vue 普通组件的 局部注册
vue 普通组件的 注册 11 Vue2_3入门到实战-配套资料\01-随堂代码素材\day03\素材\00-准备代码\小兔鲜首页静态页\src...

医疗虚拟仿真和虚拟现实有什么区别?哪个更好?
随着我们在仿真教育中越来越多地使用新技术,区分虚拟模式的类型很重要。虚拟仿真是一个统称,用来概括术语来描述各种基于仿真的体验,从基于屏幕的平台到沉浸式虚拟现实。然而,各虚拟平台在保真度、沉浸感和临场感的水平上有很大差…...
【.net core】yisha框架使用nginx代理swagger接口无法访问问题
后端代码配置 #在StartUp.cs文件中Configure方法中增加以下代码 app.UseSwagger(c >{//代理路径访问c.PreSerializeFilters.Add((doc, item) >{//根据代理服务器提供的协议、地址和路由,生成api文档服务地址doc.Servers new List<OpenApiServer>{ new…...
uniapp录音功能和音频播放功能制作
录音功能 在 UniApp 中,你可以使用 uni.getRecorderManager() 方法来创建一个录音管理器实例,从而实现录音功能。 以下是一个示例,演示了如何在 UniApp 中使用 uni.getRecorderManager() 实现录音功能: // 在需要录音的页面或组…...

服务器数据恢复-LINUX操作系统下各文件系统误删除/格式化数据的恢复方案
服务器数据恢复环境: 基于EXT2/EXT3/EXT4/Reiserfs/Xfs文件系统的Linux操作系统。 服务器故障: LINUX操作系统下误删除/格式化数据。 服务器数据恢复过程: 1、首先会检测服务器是否存在硬件故障,如果检测出硬件故障,交…...
python/C++二分查找库函数(lower_bound() 、upper_bound,bisect_left,bisect_right)
二分查找是一种经典的搜索算法,广泛应用于有序数据集中。它允许在大型数据集中高效地查找目标元素,减少了搜索的时间复杂度。本文将介绍在 C 和 Python 中内置的二分查找函数,让二分查找变得更加容易。 c lower_bound() 、upper_bound 定义…...

爬虫 — App 爬虫(二)
目录 一、Appium介绍二、node.js 安装三、Java 的 SDK 安装以及配置1、安装步骤2、配置环境变量 四、安卓环境的配置1、配置环境变量 五、Appium 安装1、安装2、打开 APP3、使用 六、Appium 使用1、定位数据(方法一,不常用)2、定位数据&#…...

汽车电子相关术语
SOA SOA(Service-Oriented Architecture,面向服务的架构)是一种在计算机环境中设计、开发、部署和管理离散模型的方法。是由Garnter1996年提出的概念,将应用程序的不同功能单元(称为服务)进行拆分…...

Python 找出最大数
"""在输入的三个数中找出最大知识点:1、条件嵌套语句if/else2.字符串分割函数split()3、列表元素索引4、数据类型转换举一反三:1、如何控制只能输入三个数,否则重新输入2、如何避免输入无效字母"""# 定义一个变…...

Spring Security 用了那么久,你对它有整体把控吗?
文章目录 1.Servlet Filter:守门人的角色2.DelegatingFilterProxy:桥接 Servlet 和 Spring 的神器3.FilterChainProxy:Spring Security 过滤器链的管家3.SecurityFilterChain:Security 过滤器的串绳4.Spring Security 中的过滤器机…...
vue+minio实现文件上传操作
vueminio实现文件上传操作 minio文件上传vueminio实现文件上传操作 minio文件上传 minio文件上传有两种方法: 第一种是通过ak,sk,调用minio的sdk putObject进行文件上传;该方法支持go,java,js等各种语言&…...
使用JavaScript实现无限滚动的方法
前言 在网页设计中,无限滚动是一种常见的交互方式,用户可持续地加载更多内容而无需刷新页面,提高用户体验。本文将介绍如何运用JavaScript实现无限滚动的效果,使网页能够自动加载更多数据,减轻用户加载新页的负担&…...

html学习综合案例1
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>个人简介</title> </head> <body>…...
神经节苷脂抗体——博迈伦
神经节苷脂抗体是指人体免疫系统中产生的一类抗体,其主要作用是攻击神经节苷脂抗原物质。神经节苷脂是一种存在于神经细胞表面的重要分子,参与了神经细胞间的信号传导和细胞黏附等重要功能。正常情况下,人体免疫系统不会对神经节苷脂产生抗体…...

【Unity】简单的深度虚化shader
【Unity】简单的深度虚化shader 实现效果 可以用于对地图场景边界的白模处理 实现方法 1.关键方法 UnityObjectToClipPos:将物体坐标转换为屏幕坐标 LinearEyeDepth:将屏幕坐标中的z值转换为实际的深度值 saturate:将值规范到0~1之间&a…...

启动 React APP 后经历了哪些过程
本文作者为 360 奇舞团前端开发工程师 前言 本文中使用的React版本为18,在摘取代码的过程中删减了部分代码,具体以源代码为准。 在React 18里,通过ReactDOM.createRoot创建根节点。并且通过调用原型链上的render来渲染。 本文主要是从以下两个…...

带自动采集小说网站源码 小说听书网站源码 小说网站源码 带教程
PTCMS可听书可下载的小说站源码 带自动采集和搭建视频教程 必装环境:Nginx(apache.iis也可),mysql,php5.6,memcached php5.6安装扩展memcache新建站点,注意新建时,PHP版本必须选择PHP5.6 安装教程 1.上传网站文件到网站目录&…...

MySQL学习笔记2
MySQL glibc版本安装: 下载相应的安装包。 学会查看mysql的官方文档: 1) 2)点击“Reference Manual”按钮: 3)选择5.7版本: 4)点击Installing MySQL on Unix/Linux Using Generic …...

【python爬虫】—星巴克产品
文章目录 需求爬取星巴克产品以及图片,星巴克菜单 python爬虫爬取结果 需求 爬取星巴克产品以及图片,星巴克菜单 网页分析: 首先,需要分析星巴克官方网站的结构,了解菜单栏的位置、布局以及菜单项的标签或类名等信息…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...

SOC-ESP32S3部分:30-I2S音频-麦克风扬声器驱动
飞书文档https://x509p6c8to.feishu.cn/wiki/SKZzwIRH3i7lsckUOlzcuJsdnVf I2S简介 I2S(Inter-Integrated Circuit Sound)是一种用于传输数字音频数据的通信协议,广泛应用于音频设备中。 ESP32-S3 包含 2 个 I2S 外设,通过配置…...

【向量库】Weaviate概述与架构解析
文章目录 一、什么是weaviate二、High-Level Architecture1. Core Components2. Storage Layer3. 组件交互流程 三、核心组件1. API Layer2. Schema Management3. Vector Indexing3.1. 查询原理3.2. 左侧:Search Process(搜索流程)3.3. 右侧&…...