GO语言 切片 map 字符串

切片

1.什么是切片

切片本身不拥有任何数据,它们只是对现有数组的引用。

2.切片的定义

1.方式1:由数组切出来:var 变量名 []元素类型 = 数组名[开始值:结束值]
//1.定义数组
var a [8]int=[8]int{1,2,3,4,5,6,7,8}
//2.定义切片,注意[]中没有数字
var b []int=a[2:6]
fmt.Println(b) // [3 4 5 6]

//更多用法,没有步长
var a [8]int=[8]int{1,2,3,4,5,6,7,8}
b:=a[:4]
fmt.Println(b) //[1 2 3 4]

2.方式2:直接定义不赋值。 注意:切片空值是?nil类型
    var a []int
    fmt.Println(a) //[],注意:切片空值是?nil类型
    if a==nil{
        fmt.Println("我是空的")
    }
    //a[0]=10 //报错
    fmt.Println(a)

方式3:make(类型,切片长度,切片容量)
    var a []int=make([]int,3,4)
    fmt.Println(a) //[0 0 0]

    //切片的长度和容量(len     cap:容量)
    var a [8]int=[8]int{1,2,3,4,5,6,7,8}
    var b []int=a[2:6]
    fmt.Println(len(b)) //4
    fmt.Println(cap(b)) //6

    var a []int=make([]int,3,4)
    fmt.Println(a)
    fmt.Println(len(a)) //3
    fmt.Println(cap(a)) //4
3.切片的常用操作
1.切片的长度和容量(len:长度,cap:容量)
    //var a [8]int=[8]int{1,2,3,4,5,6,7,8}
    //var b []int=a[2:6]
    //fmt.Println(len(b)) //4
    //fmt.Println(cap(b)) //6

        var a []int=make([]int,3,4)
    fmt.Println(a)
    fmt.Println(len(a)) //3
    fmt.Println(cap(a)) //4

2.切片追加值:append(切片名,值1,值2)
    var a [8]int=[8]int{1,2,3,4,5,6,7,8}
    var b []int=a[2:6]
    b = append(b, 9,10)
    fmt.Println(b) //[3 4 5 6 9 10]
        fmt.Println(a) //[1 2 3 4 5 6 9 10],数组的值也被修改为增加的值
        //当容量到顶,在添加值时
    b = append(b, 11)
    fmt.Println(b) //[3 4 5 6 9 10 11]
    fmt.Println(len(b)) //7
    fmt.Println(cap(b)) //12,容量翻倍
    fmt.Println(a) //[1 2 3 4 5 6 9 10]容量到顶在添加值数组值不在改变

3.修改值:切片名[索引] = 修改值
    var b =make([]int,3,4)
    b[0]=999
    fmt.Println(b) //[999 0 0]
       //超过容量,在修改值时
    var a [6]int=[6]int{1,2,3,4,5,6}
    var b []int=a[1:6]
    fmt.Println(a) //[1 2 3 4 5 6]
    fmt.Println(b) //[2 3 4 5 6]
    b= append(b, 7)
    a[0] = 2
    b[0] = 1
    fmt.Println(a) //[2 2 3 4 5 6]
    fmt.Println(b) //[1 3 4 5 6 7]
总结:追加和修改没超过容量时,一个变另一个跟着变。超过时数组和切片没有关系。

4.切片的函数传递
    var b =make([]int,3,4)
    test(b)
    fmt.Println(b)

 func test(b []int)  {
    b[0]=999
    fmt.Println(b)
}

5.切片的数据结构表示
    var a [][]string=make([][]string,2,3)
    fmt.Println(a) //[[] []]
    fmt.Println(a[0]) //[]

6.多维切片
var a [][]string=make([][]string,2,3)
fmt.Println(a) //[[] []]
fmt.Println(a[0]) //[]
a[0]=make([]string,2,3) //嵌套内的切片在初始化
if a[0]==nil{
   fmt.Println("xxxx")
}

7.多维切片初始化
    var a [][]string=[][]string{{"1","2"},{"3","4"}}
    fmt.Println(a) //[[1 2] [3 4]]
    fmt.Println(len(a)) //2
    fmt.Println(cap(a)) //2
    a[0][1]="999"
    fmt.Println(a) //[[1 999] [3 4]]
8.copy函数:copy(源,目标)
    var a =make([]int,3,10000)
    a[1]=99
    a[2]=888
    fmt.Println(a) //[0 99 888]
    var b =make([]int,2,4)
    fmt.Println(b) //[0 0]
    copy(b,a)
    fmt.Println(b) //[0 99]

3.打散和循环

1.打散       var a =[]int{1,2,4,}
    test1(1,2,3,4)
    test1(a...) //变量名...:相当于打散了
    veggies := []string{"potatoes", "tomatoes", "brinjal"}
    fruits := []string{"oranges", "apples"}
    food := append(veggies, fruits...)
    fmt.Println("food:",food)
func test1(a ...int)  {
    fmt.Println(a)
    fmt.Printf("%T",a)

}

2.循环
//循环多维切片pls := [][]string {   {"C", "C++"},   {"JavaScript"},   {"Go", "Rust"},}fmt.Println(pls)for _,v:=range pls {   for _,v1:=range v{      fmt.Println(v1)   }}

map

1.什么是map

类似于python中的字典,map 是在 Go 中将值(value)与键(key)关联的内置类型。通过相应的键可以获取到值。

2.map的定义和常用方法

1.方式1:var 变量名 map[键值类型]value值类型
        var a map[int]string
    fmt.Println(a) //map[]map的空值是nil类型
        //执行下列if语句
    if a==nil{
        fmt.Println("xxxx")
    }
2. map的初始化
        var a map[int]string=make(map[int]string)
    fmt.Println(a) //map[]此时不是nil类型注意区分
        //不执行下列语句
    if a==nil{
        fmt.Println("xxxxx")
    }
3.赋值:变量名[k] = v,取值:变量名[k],取一个不存在的key值会?返回value值类型的空值
    var a map[int]string=make(map[int]string)
    fmt.Println(a) //map[]
    if a==nil{
        fmt.Println("xxxxx")
    }
        // 赋值
    a[1]="100"
    a[2]="888"
    fmt.Println(a) //map[1:100 2:888]
        //取值
    fmt.Println(a[1]) //100
取值补充:
值,ok:=变量名[k] =>k存在ok为ture,反之为false
    if v,ok:=a[9];ok{
        fmt.Println("=-====",v)
    }else {
        fmt.Println("该值不存在")
    }
4.方式2:定义和初始化
    var a =map[int]string{1:"10",2:"100"}
    fmt.Println(a[1])
5.字典删除元素,内置函数:delete(变量名,k)
    var a =map[int]string{1:"10",2:"100"}
    delete(a,2)
    fmt.Println(a)
6.长度:len(变量名)
var a =map[int]string{1:"10",2:"100"}
fmt.Println(len(a))
7.map循环
var a =map[int]string{1:"10",0:"100",10:"999"}
//map是无序的
    for k,v:=range a{
        fmt.Println(k)
        fmt.Println(v)
    }
8.map的相等性:map 之间不能使用 == 操作符判断,== 只能用来检查 map 是否为 nil,判断两个 map 是否相等的方法是遍历比较两个 map 中的每个元素。我建议你写一段这样的程序实现这个功能
    map1 := map[string]int{
        "one": 1,
        "two": 2,
    }

    map2 := map1

    if map1 == map2 {  //报错
    }

字符串

1.什么是字符串

Go 语言中的字符串是一个字节切片。把内容放在双引号""之间,我们可以创建一个字符串。让我们来看一个创建并打印字符串

2.字符串常用方式

1.统计字节数:len(变量名)。统计字符串长度;utf8.RuneCountInString(变量名)
在go种string类型都是utf-8编码
    name := "Hello World刘清政"
    fmt.Println(len(name)) //20
    fmt.Println(utf8.RuneCountInString(name)) //14

2.字符串循环
方式1:按字节循环
    name := "name刘"
    for i:=0;i<len(name);i++{
        fmt.Println(string(name[i]))
        fmt.Printf("%T",name[i])
        fmt.Println()
    }
方式2:按字符循环
        name := "name刘"
    for _,v:=range name{
        fmt.Println(string(v))
        fmt.Printf("%T",v)
        fmt.Println()
    }

原文地址:https://www.cnblogs.com/tfzz/p/12026617.html

时间: 2024-07-30 11:08:27

GO语言 切片 map 字符串的相关文章

Go-常识补充-切片-map(类似字典)-字符串-指针-结构体

目录 Go 常识补充 Go 命名 打印变量类型科普 _ 关键字 命名规范相关 包目录规范 切片 多维切片 切片初始化的方法 多维切片初始化 切片删除元素(会略微影响效率 ,少用) copy 函数 打散切片 循环打印多维切片 Map (类似 python 字典) map 定义及初始化 赋值.取值.改值 map 删除元素.参数传递 map 相等比较.循环遍历 字符串 字符串的定义.长度.遍历字节.字符 指针 向函数传递指针参数 传递数组指针 (最好是用切片) 结构体 结构体零值 匿名结构体 结构体指

Go语言学习笔记(三)数组 &amp; 切片 &amp; map

加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 数组 Arrays 数组是同一种数据类型的固定长度的序列. 数组是值类型,因此改变副本的值,不会改变本身的值: 当作为方法的入参传入时将复制一份数组而不是引用同一指针. 通过从0开始的下标索引访问元素值. 数组定义 var a []int a = make([]int, 5) var a1 [5]int = [5]int{1, 2, 3, 4, 5} //len:5 content:[1 2 3 4 5] va

go语言学习--map类型的切片

今天在项目中遇到了一个切片的map,记录下map切片的使用 1 package main 2 3 import "fmt" 4 5 func main() { 6 7 // Version A: 8 items := make([]map[string]int, 5) 9 for i := range items { 10 items[i] = make(map[string]int, 1) 11 items[i]["num"] = i 12 } 13 fmt.Pr

看懂Gradle脚本(1)- Groovy语言的Map语法糖

这一系列文章是写给刚开始使用Gradle,并且对Groovy语法不是特别了解的Java程序员看的. 本篇文章的目标是解释清楚下面这行Gradle脚本: apply plugin: 'java' 行尾的分号是可选的 用过JavaScript语言的人对这个语法糖应该比较熟悉,下面是补上分号后的脚本: apply plugin: 'java'; Map字面量(Literal) Java语言只有基本类型.String和数组是有字面量的,如下所示: boolean b = false; int i = 1

【语言对比】字符串

字符串是各类语言中一种非常重要的数据结构,事实上大部分的代码都是基于字符串的操作,各个语言对字符串的处理方式,也是我们评价各个语言的一个重要方面. 因为C++库中并没有提供字符串这个数据类型,所以我们以STL中提供的string来进行对比.这里不选择char*进行对比,是因为char*在功能上和其它两种语言差距实在是太大了,基本上不具有对比性,之前一直使用的都是STL,所以这里直接选用STL来对比了. JAVA中选用String及其周边类,它们会作为一个整体进行对比: 而python中的stri

C语言---整型字符串转换

C语言提供了几个标准库函数,能够将随意类型(整型.长整型.浮点型等)的数字转换为字符串.下面是用itoa()函数将整数转 换为字符串的一个样例: # include <stdio.h>    # include <stdlib.h> void main (void)    {    int num = 100;    char str[25];    itoa(num, str, 10);    printf("The number ’num’ is %d and the

C语言中的字符串

1.从概念上讲,C语言中没有字符串数据类型 2.在C语言中使用字符数组来模拟字符串 3.C语言中的字符串是以'\0'结束的字符数组 4.C语言中的字符串可以分配于栈空间,堆空间或者只读存储区 5.字符串的长度就是字符串所包含字符的个数 6.C语言中的字符串长度指的是第一个'\0'字符前出现的字符个数 7.C语言中通过'\0'结束符来确定字符串的长度 注意: strlen返回数为无符号数,两个无符号数相减依然为无符号数. 1.一般情况下,千万不要自行编写C标注库已经提供的函数 2.标准库有时会使用

Swift语言指南(十)--字符串与字符

原文:Swift语言指南(十)--字符串与字符 字符串是一段字符的有序集合,如"hellow,world"或"信天翁".Swift 中的字符串由 String 类型表示,对应着 Character 类型值的集合. Swift 中的 String 类型为你的编程提供了一个高速的,兼容 Unicode规范 的文本处理方式.Swift 创建和处理字符串的语法轻量可读,与 C 语言的字符串语法颇为相似.字符串的拼接非常简单,只需将两个字符串用 + 运算符相加.字符串的值是否

用c语言统计一个字符串中有多少个数字字符

用c语言统计一个字符串中有多少个数字字符. #include<stdio.h>int main(){    char ch;     int count=0;    while((ch=getchar())!='\n')     {        if(ch>'0'&&ch<'9')              count++;     }     printf("%d\n",count);     return 0; }