首页 > 其他分享 >1 数组和切片、2 可变长参数 、3 maps

1 数组和切片、2 可变长参数 、3 maps

时间:2023-04-27 15:36:48浏览次数:43  
标签:string int fmt var 切片 maps userInfo 可变 Println

目录

1 数组和切片

1.1 数组

# 1 定义,初始化,使用
# 2 数组是值类型
	-数字,字符串,布尔,数组,都是值类型,真正直接存数据
    -切片,map,指针  引用类型,是个地址,指向了具体的值
    
# 3数组长度
# 4 循环打印数组
# 5 多纬数组
# 6 数组定义并赋初值  ,把第99 赋值为1 ,其他都是0
package main

import "fmt"

// 1 数组是值类型,go语言中函数传参是 copy 传递,复制一份参数,传入  当参数传递,在函数中修改,不会影响原来的
//2 数组长度

func main() {
	//1 数组是值类型
	//var a [3]int = [3]int{3, 4, 4}
	//test(a)
	//fmt.Println("外面的", a) // 会不会影响?

	// 2 数组长度
	//var a =[3]int{1,2,3}
	//a :=[3]int{1,2,3}
	//a := [...]int{3, 4, 5, 4, 5, 6, 67}
	//fmt.Println(a)
	//fmt.Printf("%T\n", a)
	//fmt.Println(len(a))

	// 3 循环打印数组
	//a := [...]int{3, 4, 5, 4, 5, 6, 67}
	// 基于索引的
	//for i := 0; i < len(a); i++ {
	//	fmt.Println(a[i])
	//}
	// range 循环,基于迭代的
	//for i,_ := range a { // i是索引,v是值
	//	fmt.Println(i)
	//	//fmt.Println(v)
	//}

	// 4 多纬数组
	//var a [3][2]int
	//var a [3][2]int = [3][2]int{{2, 2}, {3, 4}}
	//fmt.Println(a)
	//fmt.Println(a[0])
	//fmt.Println(a[0][1])
	// 循环多维数组
	//for i := 0; i < len(a); i++ {
	//	for j := 0; j < len(a[i]); j++ {
	//		fmt.Println(a[i][j])
	//	}
	//}
	//for _, v := range a {
	//	for _, v1 := range v {
	//		fmt.Println(v1)
	//	}
	//}

	// 5 数组定义并赋初值  ,把第99 赋值为1 ,其他都是0
	//var a [100]int8 = [100]int8{98: 1, 66: 88}
	//fmt.Println(a)

}

func test(a [3]int) {
	a[0] = 999
	fmt.Println(a)

}

1.2 切片

# slice:切片是由数组建立的一种方便、灵活且功能强大的包装。切片本身不拥有任何数据。它们只是对现有数组的【引用】

package main

import "fmt"

// 切片

func main() {

	//1 切片的定义   中括号中不放任何东西,是切片类型,放个数子,就是数组类型
	//var a []int //只定义,没有初始化,是引用类型  是nil类型,等同于python中的None
	//if a == nil {
	//	fmt.Println("我是空")
	//}
	//fmt.Println(a) // []
	//fmt.Println(a[0])
	// 1.1 定义并初始化
	//var b [10]int      //值类型,有默认值
	//var a []int = b[:] // 表示a这个切片,对数组进行引用,引用了从0到最后
	//fmt.Println(a)
	//a[8] = 88
	//fmt.Println(a[8])
	//fmt.Println(a)
	//
	//fmt.Println(b)

	// 2 切片的取值赋值
	//fmt.Println(a[8])

	// 3 切片的修改,会影响底层数组; 数组的修改也会影响切片
	//b[0] = 11
	//fmt.Println(b)
	//fmt.Println(a)

	// 4 基于数组,获得切片
	//var b [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0} //值类型,有默认值
	////var a []int = b[0:3]                                  // 表示a这个切片,对数组进行引用,引用了从0到最后
	////fmt.Println(a)
	////a[0] = 99
	////fmt.Println(a)
	////fmt.Println(b)
	//var a []int = b[6:9]
	//fmt.Println(a)
	//a[0] = 99
	//fmt.Println(a)
	//fmt.Println(b)
	//b[0] = 88
	//fmt.Println(b)

	// 5 切片追加值
	//var b [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
	//var a []int = b[6:9]
	//a[0] = 99
	//fmt.Println(b) //[1 2 3 4 5 6 99 8 9 0]
	//fmt.Println(a) //[99 8 9]
	//
	//a = append(a, 66)
	//fmt.Println(a) //[99 8 9 66]
	//fmt.Println(b) //[1 2 3 4 5 6 99 8 9 66]

	// 6  切片的长度和容量
	//var b [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
	//var a []int = b[6:9]
	//fmt.Println(len(a)) // 3
	//fmt.Println(cap(a)) //容量,能存多少 4 ,不是底层数组的大小,取决于切片切数组的位置

	// 7 切片如果追加值超过了底层数组长度,会自动扩容
	//var b [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
	//var a []int = b[6:9]
	//a[0] = 99
	//fmt.Println(b) //[1 2 3 4 5 6 99 8 9 0]
	//fmt.Println(a) //[99 8 9]

	//a = append(a, 66)
	//fmt.Println(a) //[99 8 9 66]
	//fmt.Println(b) //[1 2 3 4 5 6 99 8 9 66]
	//fmt.Println(len(a))
	//fmt.Println(cap(a))

	// 超过底层数组,追加值
	//a = append(a, 77)
	//fmt.Println(a)      //[99 8 9 66 77]
	//fmt.Println(len(a)) // 5
	//fmt.Println(cap(a)) // 8   ,超过容量,翻倍扩容(容量在1024内)
	//a = append(a, 11, 222, 33, 55)
	//fmt.Println(len(a)) // 9
	//fmt.Println(cap(a)) // 16   ,超过容量,翻倍扩容(容量在1024内)

	// 改底层数组
	//b[9] = 999
	//fmt.Println(b)
	//fmt.Println(a)

	// 8 切片定义并初始化  使用数组初始化
	// 使用make初始化
	//var a []int // 是 nil,没有初始化
	//var a []int = make([]int, 3, 4) // 要初始化 ,长度为3,容量为4
	//fmt.Println(a)                  // [0 0 0]
	//fmt.Println(len(a))
	//fmt.Println(cap(a))
	//var a []int = make([]int, 0, 4) // 要初始化 ,长度为0,容量为4
	//fmt.Println(a) // []    有可能是nil,有可能已经初始化完成了,只有初始化完成了才能用
	//fmt.Println(len(a))
	//fmt.Println(cap(a))

	//a = append(a, 5)
	//fmt.Println(a)
	//fmt.Println(len(a)) //1
	//fmt.Println(cap(a)) // 4

	// 9 切片的参数传递  引用类型,函数中修改值,会影响原来的
	//var a []int = make([]int, 3, 5)
	////a[1] = 99 //[0 99 0]
	//test2(a)
	//fmt.Println(a) // [99 0 0]

	// 10 多纬切片   切片定义并初始
	//var a []int = []int{2, 3, 4, 45}
	//fmt.Println(a)
	//fmt.Println(len(a))
	//fmt.Println(cap(a))
	//a = append(a, 55)
	//fmt.Println(len(a))
	//fmt.Println(cap(a))

	//var a [][]string = [][]string{{"1", "3"}, {"o"}, {"5", "o", "99"}}
	//fmt.Println(a)

	var a [][]string = make([][]string, 3, 3)
	fmt.Println(a[2])
	a[2] = make([]string, 3, 3)
	fmt.Println(a[2][0])

}

func test2(a []int) {
	a[0] = 99
	//fmt.Println(a) //[99 99 0]
	a = append(a, 33)
	a[0] = 88
	fmt.Println(a)

}



image-20230427113558264

2 可变长参数

package main

import "fmt"

// 可变长参数

func main() {
	//test3("1", "lqz")
	var a []string = []string{"lqqz", "pyy"}
	test3(a...) // 相当于大散了传入
}

func test3(a ...string) {
	fmt.Println(a)
	fmt.Printf("%T", a)
	fmt.Println(cap(a))

}

3 maps

package main

import "fmt"

//map

func main() {

	//1 key -value 形式存储 定义一个map
	//var userInfo map[int]string // 没有初始化,它是nil,但是打印出来不是nil
	//fmt.Println(userInfo)       //map[]
	//if userInfo == nil {
	//	fmt.Println("asdfasdf")
	//}

	// 2 map 初始化 方式一
	//var userInfo map[int]string = map[int]string{1: "lqz", 3: "pyy"}
	//fmt.Println(userInfo)
	//if userInfo == nil {
	//	fmt.Println("asdfasdf")
	//}

	// 2 map 初始化 方式二  make初始化
	//var userInfo map[int]string = make(map[int]string)
	//fmt.Println(userInfo) //map[]
	//if userInfo == nil {
	//	fmt.Println("asdfasdf")
	//}

	// 3 初始化后才能取值赋值
	//var userInfo map[int]string = make(map[int]string)
	//var userInfo map[int]string
	////fmt.Println(userInfo[1])
	//userInfo[1] = "pyy"
	//fmt.Println(userInfo)

	// 以后所有的引用类型,都需要初始化才能用,值类型不需要,有默认值

	//4 取值赋值
	//var userInfo map[string]string = make(map[string]string)
	//userInfo["age"] = "19"
	//userInfo["name"] = "lqz"
	//fmt.Println(userInfo)
	//
	//fmt.Println(userInfo["age"])
	//// 取不存在的----》显示vaule值的默认值
	//fmt.Println("--", userInfo["hobby"])
	//
	//// 如何判断一个key在不在map中   按key取值,能返回一个布尔值,根据布尔值判断
	//v, ok := userInfo["name"]
	//fmt.Println(v)
	//fmt.Println(ok) //false
	//
	//if v, ok := userInfo["name"]; ok {
	//	fmt.Println(v)
	//}

	// 5 删除map元素
	//var userInfo map[string]string = make(map[string]string)
	//userInfo["age"] = "19"
	//userInfo["name"] = "lqz"
	//delete(userInfo, "name")
	//fmt.Println(userInfo)

	// 6 map的长度
	//var userInfo map[string]string = make(map[string]string)
	//fmt.Println(len(userInfo))
	//userInfo["age"] = "19"
	//userInfo["name"] = "lqz"
	//fmt.Println(len(userInfo))

	// 7 引用类型
	var userInfo map[string]string = make(map[string]string)
	fmt.Println(len(userInfo))
	userInfo["age"] = "19"
	userInfo["name"] = "lqz"
	test6(userInfo)
	fmt.Println(userInfo)

}
func test6(u map[string]string) {
	u["name"] = "pyy"
	fmt.Println(u)

}

标签:string,int,fmt,var,切片,maps,userInfo,可变,Println
From: https://www.cnblogs.com/8564129qwe/p/17359023.html

相关文章

  • template<typename... T> 可变模板参数
    cppreference解释地址。模板参数包在模板参数中的顺序要求:在主类模板中,模板参数包必须是模板参数列表中的最后一个参数。在函数模板中,模板参数包可能出现在列表的前面,前提是以下所有参数都可以从函数参数中推导出来,或者具有默认参数:template<typenameU,typename...Ts>......
  • 高精度模板 大数减大数 可变数组vector实现
    vector<int>Sub(vector<int>&A,vector<int>&B)//这里默认长数减去短数{vector<int>C;//结果向量intT=0;//上一位借位标志位for(inti=0;i<A.size();i++){T=A[i]-T;if(i<B.size())T-=B[i];//检......
  • javascript import maps 特性现已被全部主流浏览器支持
    值得庆祝Importmaps特性现在可以在全部三个主要浏览器内使用现在主流现代web应用引入和利用javascript是通过Esmodule模块实现。在开发javascript上,比起无模块化功能的旧版浏览器,现代浏览器支持模块化且提供了许多好用的功能引入esmodule使用<scripttype=“impor......
  • pandas.DataFrame—构建二维、尺寸可变的表格数据结构
    语法格式pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=None)常用的几个参数解释:data:一系列数据,包括多种类型;index:索引值,行标签,默认值为RangeIndex(0,1,2,…,n);columns:列标签,默认值为RangeIndex(0,1,2,…,n);dtype:设置数据......
  • Cesium加载ArcGIS Server4490且orgin -400 400的切片服务
    Cesium在使用加载Cesium.ArcGisMapServerImageryProvider加载切片服务时,默认只支持wgs84的4326坐标系,不支持CGCS2000的4490坐标系。如果是ArcGIS发布的4490坐标系的切片服务,如果原点在orginX:-180.0Y:90.0的情况下,我们可以通过WebMapTileServiceImageryProvider按照WMTS的方式......
  • spring boot 切片测试
    我想问大家一下使用springboot项目的时候做单元测试的时,使用的哪种方式?有很多小伙伴使用spring-boot-starter-test,但是这种测试是比较笨重的。当你想要测一个方法时,相关于把整个springboot项目启动启动测试这一个方法如果项目使用的组件很多,比如有redis,数据库,kafka,minio等......
  • 【C/C++】 可变参数函数
    #include<stdio.h>#include<stdarg.h>/***按自定义格式符解析数据*/voidprocess(constchar*fmt,va_listargs){for(;*fmt;fmt++){if(*fmt=='%'){continue;}switch(*fmt){ca......
  • 如何创建不可变的Map对象
    在Java编程中,创建不可变的Map对象是一项非常重要的任务,这不仅有助于保证程序的线程安全性和安全性,同时还能避免意外的状态变化。本篇博客将详细介绍如何在Java程序中创建不可变的Map对象,以及Java8之前和之后的版本间的差异。什么是不可变类或对象?不可变的类或对象是指在创建后......
  • Go 输出两个slice切片的差集
    goslice切片差集funcmain(){leyangjun1:=[]string{10,9,8}leyangjun2:=[]string{4,5,6,7,8}retDiff:=DifferenceSet(leyangjun1,leyangjun2)fmt.Println(retDiff)}funcDifferenceSet(a[]uint32,b[]uint32)[]uint32{ varc[]uint32 tem......
  • SWT shell设置可变大小
    SWTshell设置可变大小 Shellshell=newShell(shell,SWT.SHELL_TRIM)SWT.SHELL_TRIM会在shell窗口中加上最大小,最小化,关闭,以及窗口可变大小 本文来自博客园,作者:jason_bo,转载请注明原文链接:https://www.cnblogs.com/jasonboboblog/p/13398550.html......