首页 > 其他分享 >Go - 【字符串,数组,哈希表】常用操作

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

时间:2023-09-25 17:08:46浏览次数:44  
标签:Println myList int fmt 字符串 哈希 Go myMap


一. 字符串

  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:o

for 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 main

import (
    "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 main

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


标签:Println,myList,int,fmt,字符串,哈希,Go,myMap
From: https://blog.51cto.com/u_15349841/7597223

相关文章

  • Java -【字符串,数组,哈希表】常用操作
    一.字符串创建字符串:可以使用双引号或者String类的构造方法创建字符串。Stringstr1="HelloWorld";Stringstr2=newString("HelloWorld");连接字符串:可以使用加号或者String类的concat()方法连接字符串。Stringstr3=str1+str2;Stringstr4=str1.concat(str2);获......
  • SpringBoot MongoDB操作封装
    1.引入Jar包<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>2.MongoDbHelper操作/***MongoDBOperationclass*......
  • go之gorm 框架
      go.gorm使用 GORM是一个Go语言的ORM库,用于简化数据库操作。它支持MySQL、PostgreSQL、SQLite和SQLServer等多种数据库,并提供了丰富的API,使得我们可以很方便地进行增删改查等操作。本文将介绍如何在GO中使用gorm,并提供一些示例代码。安装gorm在开始使用gorm之前......
  • Go 项目的 MAKE 工具
    Go项目的MAKE工具MAKE工具是Linux和Unix系统中一种常见的自动化构建工具,通常用于管理和组织软件项目。在Go语言中,使用MAKE工具可以轻松地管理和构建项目,并自动执行诸如编译、测试、安装等复杂的操作。下面将介绍如何在Go项目中使用MAKE工具,并说明其主要优势......
  • Go开发pb
     pb开发-proto文件以及PB在go项目中的开发过程 以下是一个简单的示例,演示如何在Go项目中使用PB进行开发:编写Proto文件假设我们要开发一个简单的分布式计算系统。首先,我们需要编写一个Proto文件来定义请求和响应消息类型以及服务接口。以下是一个示例:复制代码sy......
  • Golang 的骚操作:go:linkname
    背景在看源码时,一些源码方法没有方法体,难道说明这些方法为空?例如:time.Now调用的now(),time.Sleep,reflect.makechan//Providedbypackageruntime.funcnow()(secint64,nsecint32,monoint64)funcSleep(dDuration)funcmakechan(typ*rtype,sizeint)(ch......
  • WPF 将字符串按固定位数间隔展示
    使用转换器,将字符串值做处理:usingSystem;usingSystem.Collections.Generic;usingSystem.Globalization;usingSystem.Linq;usingSystem.Text;usingSystem.Windows;usingSystem.Windows.Data;namespaceControls.Converters{publicclassStringSpaceConvert......
  • go 定义类型
    定义变量方式定义变量时需要注意在最外层一定要使用var的方式定义变量不能使用':='的方式,只有在func里面可以使用':='定义变量var(strstring="holle"sumint=1enablebool=false)functest1(){varstr2string="你好"str1:="......
  • golang 1.18 workspace mode
    why?为什么需要workspace历史发展和版本依赖的管理GOPATH最开始的模式开发者需要设置一个环境变量GOPATH,用于指定项目的工作空间。GOPATH是一个目录路径,其中包括了三个重要的子目录:src、bin和pkg通过goget命令,GOPATH/src下的相应目录中缺点:必须指定GOPATH......
  • Django celery 定时任务与周期任务的创建-暂停-开始-删除
    发开阶段遇到了需要定时任务以及周期任务才能进行的事情,这里进行记录一下,防止下次我再写的时候写不明白。首先在你们项目里面创建以下文件:celery:importosos.environ.setdefault("DJANGO_SETTINGS_MODULE","settings")fromceleryimportCeleryfromquality_control.ce......