Go - 【字符串,数组,哈希表】常用操作

一. 字符串

  1. 字符串长度:
s := "hello"
l := len(s)
fmt.Println(l) // 输出 5
  1. 遍历字符串:
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])
}
  1. 字符串比较:
s1 := "hello"
s2 := "world"
if s1 == s2 {fmt.Println("equal")
} else {fmt.Println("not equal")
}
// 输出 not equal
在这里插入代码片
  1. 拼接字符串:
s1 := "hello"
s2 := "world"
s3 := s1 + " " + s2
fmt.Println(s3) // 输出 hello world
  1. 字符串切割:
s := "a,b,c,d"
parts := strings.Split(s, ",")
for _, p := range parts {fmt.Println(p)
}
// 输出:
// a
// b
// c
// d
  1. 字符串替换:
s := "hello world"
s = strings.Replace(s, "world", "go", -1)
fmt.Println(s) // 输出 hello go
  1. 字符串查找:
s := "hello world"
idx := strings.Index(s, "world")
fmt.Println(idx) // 输出 6
  1. 字符串截取:
s := "hello world"
substr := s[0:5]
fmt.Println(substr) // 输出 hello
  1. 字符串转换:
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
  1. 字符串格式化:
name := "Tom"
age := 18
s := fmt.Sprintf("name=%s, age=%d", name, age)
fmt.Println(s) // 输出 name=Tom, age=18
  1. 判断字符时候在字符串当中
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函数,该函数可以返回字符在字符串中的位置。
  1. 排序
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)
}

二. 数组 - 列表

  1. 创建列表:
myList := []int{1, 2, 3, 4, 5}
  1. 获取列表长度:
length := len(myList)  // 等于 5
  1. 访问列表元素:
firstElement := myList[0]     // 等于 1
lastElement := myList[len(myList)-1]  // 等于 5
sublist := myList[1:3]         // 等于 [2,3]
  1. 修改列表元素:
myList[0] = 10     // 现在 myList 等于 [10, 2, 3, 4, 5]
  1. 添加元素:
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]
  1. 删除元素:
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]
  1. 检查元素是否在列表中:
for _, element := range myList {if element == 3 {fmt.Println("3 在列表中")}
}
  1. 列表排序:
sort.Ints(myList)          // 现在 myList 等于 [2, 3, 5, 6, 7, 8]
sort.Sort(sort.Reverse(sort.IntSlice(myList)))   // 现在 myList 等于 [8, 7, 6, 5, 3, 2]
  1. 合并列表:
newList := append(myList, []int{9, 10}...)  // 等于 [2, 3, 5, 6, 7, 8, 9, 10]
  1. 列表复制:
copyOfList := make([]int, len(myList))
copy(copyOfList, myList)  // 等于 [2, 3, 5, 6, 7, 8]

三. 哈希表 - 字典

  1. 创建哈希表:
myMap := make(map[string]int)
  1. 在哈希表中设置键值:
myMap["apple"] = 1
myMap["banana"] = 2
myMap["orange"] = 3
  1. 从哈希表中获取键值:
value := myMap["apple"]    // 等于 1

Gomap数据类型没有类似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)
  1. 检查键是否在哈希表中:
if _, ok := myMap["apple"]; ok {fmt.Println("apple 在哈希表中")
}
  1. 删除键值:
delete(myMap, "apple")      // 从哈希表中删除键值 "apple"
  1. 获取哈希表长度:
length := len(myMap)
  1. 迭代哈希表中的键值对:
for key, value := range myMap {fmt.Printf("key: %s, value: %d\n", key, value)
}
  1. 判断哈希表是否为空:
if len(myMap) == 0 {fmt.Println("哈希表为空")
}
  1. 创建和初始化哈希表:
myMap := map[string]int{"apple": 1,"banana": 2,"orange": 3,
}
  1. 复制哈希表:
copyOfMap := make(map[string]int)
for key, value := range myMap {copyOfMap[key] = value
}
  1. 判断键是否存在哈希表中
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"。
  1. 字典排序

使用 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 - 【字符串,数组,哈希表】常用操作的基本使用,希望对你有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/88055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

笔试强训Day3

学了一坤时Linux&#xff0c;赶紧来俩道题目放松放松。 T1&#xff1a;在字符串中找出连续最长的数字串 链接&#xff1a;在字符串中找出连续最长的数字串__牛客网 输入一个字符串&#xff0c;返回其最长的数字子串&#xff0c;以及其长度。若有多个最长的数字子串&#xff0c…

Linux 入门:基本指令

本篇文章来介绍我们在初学Linux时可以会碰倒的一些基本指令&#xff0c;让我们对这些指令有一个基本的了解。 目录 01. ls 指令 02. pwd 命令 03. cd 指令 04. touch 指令 05. mkdir 指令&#xff08;重要&#xff09; 06. rmdir指令 && rm 指令&#xff08;重…

HTML+CSS综合案例二:CSS简介

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title> CSS简介</title><style>h1{color: #33…

WebGL绘制圆形的点

目录 前言 如何实现圆形的点&#xff1f; 片元着色器内置变量&#xff08;gl_FragCoord、gl_PointCoord&#xff09; gl_PointCoord的含义 示例程序&#xff08;RoundedPoint.js&#xff09; 代码详解 前言 本文将讨论示例程序RoundedPoint&#xff0c;该程序绘制了圆…

openstack自定制cirros镜像

前言 cirros作为openstack常用的测试云镜像&#xff0c;基于busybox打包&#xff0c;体积小巧好用&#xff0c;只有14M&#xff0c;启动速度快&#xff0c;且包含常用的cli工具&#xff0c;比如ping,nc,ip等等。 但我在使用过程种&#xff0c;萌发了cirros定制的一些需求&…

高效记录,事项井然——OmniOutliner 5 Pro for Mac 信息大纲记录工具

OmniOutliner 5 Pro for Mac 是一款强大的信息大纲记录工具&#xff0c;帮助您高效组织和管理各种信息。无论是个人笔记、工作计划、项目管理还是学习资料&#xff0c;这款应用都能满足您的需求&#xff0c;并使您的日常工作更加井然有序。 OmniOutliner 5 Pro 提供了一套丰富…

【我的创作纪念日】使用pix2pixgan实现barts2020数据集的处理(完整版本)

使用pix2pixgan &#xff08;pytorch)实现T1 -> T2的基本代码 使用 https://github.com/eriklindernoren/PyTorch-GAN/ 这里面的pix2pixgan代码进行实现。 进去之后我们需要重新处理数据集&#xff0c;并且源代码里面先训练的生成器&#xff0c;后训练鉴别器。 一般情况下…

UX设计VSUI设计

UX设计在近年来国内蓬勃发展,许多人对其产生了浓厚的兴趣。那么我们应该如何通过自学来系统地学习UX设计呢?话不多说&#xff0c;上干货&#xff01; 1、 深入了解UX设计行业 在开始学习之前,需要深入了解UX设计师的工作内容和行业发展前景。确定这是自己想要从事的职业后,再…

Nginx的反向代理、动静分离、负载均衡

反向代理 反向代理是一种常见的网络技术&#xff0c;它可以将客户端的请求转发到服务器群集中的一个或多个后端服务器上进行处理&#xff0c;并将响应结果返回给客户端。反向代理技术通常用于提高网站的可伸缩性和可用性&#xff0c;并且可以隐藏真实的后端服务器地址。 #user…

Kafka关键点总结-消息的顺序性

Kafka 通过不同的角度&#xff0c;即生产者、消费者和Broker&#xff0c;来保证消息的顺序性&#xff1a; 生产者角度&#xff1a; 消息按顺序发送&#xff1a;生产者可以确保它按照特定的顺序将消息发送到 Kafka 主题中的分区。这可以通过生产者端的顺序写入消息来实现。例如&…

零基础小白学习 Java 要经历的阶段!

Java是一种广泛使用的高级编程语言&#xff0c;具有强大的跨平台性和丰富的类库支持。对于初学者而言&#xff0c;学习Java可以从零基础开始&#xff0c;通过逐步深入的学习&#xff0c;最终掌握Java编程的基本技能和理论知识。本文将从零基础学习Java的角度&#xff0c;探讨学…

Vue模板语法【下】事件处理器,表单、自定义组件、通信组件

目录 一、事件处理器 1.1常用的事件修饰符 1.2常用的按键修饰符 二&#xff0c;vue中的表单 三、自定义组件 四&#xff0c;通信组件 一、事件处理器 1.1常用的事件修饰符 Vue的事件修饰符是用来改变事件的默认行为或者添加额外的功能。以下是一些常用的事件修饰符及其…

如何在Python中实现高效的数据处理与分析

在当今信息爆炸的时代&#xff0c;我们面对的数据量越来越大&#xff0c;如何高效地处理和分析数据成为了一种迫切的需求。Python作为一种强大的编程语言&#xff0c;提供了丰富的数据处理和分析库&#xff0c;帮助我们轻松应对这个挑战。本文将为您介绍如何在Python中实现高效…

医学影像SAM

医学影像SAM 1. 医学影像SAM1.1. MedSAM1.2. SAM-Adapter1.3. Medical-SAM-Adapter1.4. sam-med2d1.5. MS-SAM 下面整理了一些比较好的博客。 1. 医学影像SAM 由于sam在医学影像上表现不是特别好&#xff0c;在该类型数据集上就需要再训练。 1.1. MedSAM MedSAM&#xff1a…

Vue组件库Element

目录 Vue组件库ElementElement简介Element快速入门环境配置Element常用组件Table表格Table表格演示Table表格属性详解 Pagination分页Pagination分页演示Pagination分页属性详解Pagination分页事件详解 Dialog对话框Dialog对话框组件演示Dialog对话框属性详解 Form表单Form表单…

在Android studio高版本上使用低版本的Github项目库报错未能解析:Landroid/support/v4/app/FrageActivity;

我在我的项目中有一个导包: // 基础依赖包&#xff0c;必须要依赖 沉浸式狀態欄 implementation com.gyf.immersionbar:immersionbar:3.0.0 但是我的as版本比较高,我使用这个导包里面的方法会直接报错: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/suppor…

Halcon Window相关算子(一)

(1) dev_close_window( : : : ) 功能&#xff1a;关闭激活的活动图形显示窗口 (2) dev_open_window( : : Row, Column, Width, Height, Background : WindowHandle) 功能&#xff1a;打开一个新的图形窗口&#xff0c;该窗口可用于显示图像、区域和线条等对象以及执行文本输…

Python基于微博的舆论分析,微博情感分析可视化系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 简介意义 技术栈效果图微博首页情感分析关键词分析热门评论舆情预测 源码咨询 简介 Python基于微…

【操作系统笔记一】程序运行机制CPU指令集

内存地址 指针 / 引用 指针、引用本质上就是内存地址&#xff0c;有了内存地址就可以操作对应的内存数据了。 不同的数据类型 字节序 大端序&#xff08;Big Endian&#xff09;&#xff1a;字节顺序从低地址到高地址顺序存储的字节序小端序&#xff08;Little Endian&#…

从MVC到DDD,该如何下手重构?

作者&#xff1a;付政委 博客&#xff1a;bugstack.cn 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; 大家好&#xff0c;我是技术UP主小傅哥。多年的 DDD 应用&#xff0c;使我开了技术的眼界&#xff01; MVC 旧工程腐化严重&#xff0c;…