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爬虫爬取结果 需求 爬取星巴克产品以及图片,星巴克菜单 网页分析: 首先,需要分析星巴克官方网站的结构,了解菜单栏的位置、布局以及菜单项的标签或类名等信息…...
算法 矩阵最长递增路径-(递归回溯+动态规划)
牛客网: BM61 求矩阵的最长递增路径 解题思路: 1. 遍历二维矩阵每个位置,max求出所有位置分别为终点时的最长路径 2. 求某个位置为终点的最长路径时,使用动态规划dp对已经计算出的位置进行记录 3. 处理某个位置的最长路径时,如果dp[i][j]位…...
四、数学建模之图与网络模型
1.定义 2.例题及软件代码求解 一、定义 1.图和网络是相关概念 (1)图(Graph):图是数学和计算机科学中的一个抽象概念,它由一组节点(顶点)和连接这些节点的边组成。图可以是有向的&…...
php在header增加key,sign,timestamp,实现鉴权
在PHP中,您可以通过在HTTP请求的Header中增加Key、Sign和Timestamp等信息来进行安全性鉴权。 以下是一种基本的思路和示例,用于说明如何实现这种鉴权机制: 生成Key和Sign: 服务端和客户端之间共享一个密钥(Key&#x…...
Spring实例化源码解析之ConfigurationClassParser(三)
前言 上一章我们分析了ConfigurationClassPostProcessor的postProcessBeanDefinitionRegistry方法的源码逻辑,其中核心逻辑do while中调用parser.parse(candidates)方法,解析candidates中的候选配置类。然后本章我们主要分析ConfigurationClassParser的…...
在 Substance Painter中实现Unity Standard Shader
由于有需要在Substance Painter中显示什么样的效果,在Unity就要显示什么样的效果的需求,最近研究了几天,总算在Substance Painter中实现Unity standard的材质的渲染效果。具体效果如下: 在Unity中: Substance Painte…...
第二证券:个人开证券账户要开户费吗?
随着互联网和移动端东西的遍及,越来越多的人开端涉足股票投资,开立证券账户也成为一个热门话题。但是,许多初学者或许会有疑问,个人开证券账户是否需求支付开户费呢?这个问题的答案并不是那么简略,需求考虑…...
大厂面试-16道面试题
1 java集合类有哪些? List是有序的Collection,使用此接口能够精确的控制每个元素的插入位置,用户能根据索引访问List中元素。常用的实现List的类有LinkedList,ArrayList,Vector,Stack。 ArrayList是容量…...
搭建GraphQL服务
js版 GraphQL在 NodeJS 服务端中使用最多 安装graphql-yoga: npm install graphql-yoga 新建index.js: const {GraphQLServer} require("graphql-yoga")const server new GraphQLServer({ typeDefs: type Query { hello(name:String):String! …...
数据仓库介绍及应用场景
数据仓库(Data Warehouse)是一个用于存储、管理、检索和分析大量结构化数据的集中式数据库系统。与传统的事务处理数据库不同,数据仓库是为了支持决策支持系统(Decision Support Systems, DSS)和业务智能(B…...
代码随想录算法训练营Day56 | 动态规划(16/17) LeetCode 583. 两个字符串的删除操作 72. 编辑距离
动态规划马上来到尾声了,当时还觉得动态规划内容很多,但是也这么过来了。 第一题 583. Delete Operation for Two Strings Given two strings word1 and word2, return the minimum number of steps required to make word1 and word2 the same. In on…...
公司找人做的网站到现在还没出来/搜索量查询百度指数
来源:blog.csdn.net/yasin_huang/article/details/106556935Spring-webflux简介什么是“响应式”Spring-webflux的响应式API选择Spring-webmvc还是Spring-webflux呢并发模型webflux代码示例Spring-webflux简介spring-webflux是spring在5.0版本后提供的一套响应式编程…...
网站首页关键词/seo外推软件
2019独角兽企业重金招聘Python工程师标准>>> 有 1000 个一模一样的瓶子,其中有 999 瓶是普通的水,其中有一瓶含有剧毒(稀释后仍然具有毒性),你只有 10 条小白鼠,它们在喝下毒药后会马上死去&…...
做网站的是些什么公司/黑龙江seo关键词优化工具
* 定义 对于树中的每个节点x,它的左子树中所有关键字值小于x的关键字值,而他的右子树种所有关键字值大于x的关键字值 * SearchTree.php <?phpnamespace algorithm\tree;use algorithm\sort\Comparator;class Node {public $element;public $left;p…...
网站建设网站排名/线上推广的方法
在学习C语言中发现strlen和sizeof的关系不是很明确,今天来总结一下这两个的区别: sizeof 是运算符,用来计算字节数,在计算字符串数组大小时包含(\0)在编译时计算大小,参数可以是数组、指针、类型…...
比较好看的wordpress主题/seo怎么学在哪里学
106. 从中序与后序遍历序列构造二叉树 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 题解 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNod…...
wordpress移到根目录/杭州seo网站推广排名
记录使用databinding遇到的小问题。 前面先介绍一下简单用法,在引出问题。 首先recyclerview中会用到ViewHolder,下面列出一个通用bindViewholder: public class BindingViewHolder<T extends ViewDataBinding> extends RecyclerView…...