day06 指针pointer map集合

day06 指针pointer map集合,第1张

day06 指针pointer map集合 make 和 new区别

make和new都是用来申请内存的new 一般很少用,一般用于给基本的数据类型申请内存,如stringint等,返回对应类型的指针。make是用来给slice、map、chan申请内存的,make返回的是对应的这三个类型的本身。

package main

import "fmt"

//vscode 不支持go module
func main() {
	//Go语言中不存在指针 *** 作,只需要记住两个符号	1.&取地址 2.*根据地址取值
	a := 18
	p := &a
	b := a
	fmt.Printf("%pn",&a)
	fmt.Printf("%pn",&b)
	fmt.Printf("%Tn",p)
	//根据地址取值
	m := *p
	fmt.Println(m)

	//var s *int //nil pointer
	//*s = 100 //空指针没有内存地址,无法赋值
	//new函数申请一个内存地址
	var s = new(int)
	*s = 100 //空指针没有内存地址,无法赋值
	fmt.Println(*s)
}

map集合
package main

import "fmt"

func main() {
 	//map 是一种无需的基于key-value的数据类型,Go语言中的map是引用类型,必须初始化才能使用
	var m1 map[string]int
	//map未初始化无法使用(没有在内存中开辟空间内存)
	m1 = make(map[string]int,10)   //初始化时要估算好map容量,避免在程序运行期间再动态的扩容
	m1["name"] = 123
	m1["age"] = 20
	fmt.Println(m1["age2"]) //如果不存在key,拿到对应值类型的0值
	value, ok := m1["name2"]
	if !ok {
		fmt.Println("查不到")
	}else{
		fmt.Println(value)
	}

	//map的遍历
	for _, v :=range m1{
		fmt.Println(v)
	}

	//删除  如果删除一个不存在的键值,啥也不干   delete函数是没用返回值的
	delete(m1,"name")
	fmt.Println(m1)
}

package main

import (
	"fmt"
	"math/rand"
	"sort"
	"time"
)

func main() {
	rand.Seed(time.Now().UnixNano()) //初始化随机数种子

	var scoreMap = make(map[string]int, 200)

	for i := 0; i < 100; i++ {
		key := fmt.Sprintf("stu%02d", i) //生成stu开头的字符串
		value := rand.Intn(100)          //生成0~99的随机整数
		scoreMap[key] = value
	}
	fmt.Println(scoreMap)

	//取出map中的所有key存入切片keys
	var keys = make([]string, 0, 200)
	for key := range scoreMap {
		keys = append(keys, key)
	}
	fmt.Println(keys)
	//对切片进行排序
	sort.Strings(keys)
	//按照排序后的key遍历map
	for _, key := range keys {
		fmt.Println(key, scoreMap[key])
	}
}

package main

import (
	"fmt"
	"strings"
)

//map和slice组合
func main() {
	//元素类型为map的切片
	var s1 = make([]map[int]string,10,10)
	//没有对内部的map进行初始化
	s1[0] = make(map[int]string,1)
	s1[0][100] = "A"
	fmt.Println(s1)

	//值为切片类型的map
	var m1 = make(map[string][]int,10)
	m1["北京"] = []int{1,2,3}
	fmt.Println(m1)

	var hellow = "how do you do yes is you do to how to you"

	data := strings.Split(hellow," ")

	//定义一个map
	data2 := make(map[string]int,10)

	for _,v := range data{

		value, ok := data2[v]
		//判断是否存着,不存在集合中添加一个元素,存在+1
		if !ok {
			data2[v] = 1
		}else{
			data2[v] = value + 1
		}
	}
	fmt.Println(data2)

}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5709443.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存