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爬虫爬取结果 需求 爬取星巴克产品以及图片,星巴克菜单 网页分析: 首先,需要分析星巴克官方网站的结构,了解菜单栏的位置、布局以及菜单项的标签或类名等信息…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...
2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...
