首页 > 其他分享 >map数据类型

map数据类型

时间:2024-11-13 21:19:23浏览次数:1  
标签:map string fmt 数据类型 map1 key Println

map

Map 是一种无序的键值对的集合。

  • 无序 :map[key],不可能使用 map[0] map[1]1去取出数据
  • 键值对:key - value /key - value key - value key - value

Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。

Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。

不过,Map 是无序的,我们无法决定它的返回顺序。

Map也是引用类型

【1】、map的定义

package main

import (
	"fmt"
)

func main() {
	// map集合,保存数据的一种结构
	// 创建一个map  map[key]value,定义后默认是空的
	var map1 map[int]string
	if map1 == nil {
		fmt.Println("map1==null")
	}
	// 更多的时候时使用make方法去创建
	var map2 = make(map[string]string)
	fmt.Println(map2)

	// 在创建的时候,添加一些数据 map[string]int{"key":"value"}
	var map3 = map[string]int{"C": 100, "Go": 10, "java": 60}
	fmt.Println(map3)
	fmt.Printf("%T\n", map3)
}

【2】、map的使用

  • 创建并初始化map
  • map[key] = value 。将vaule赋值给对应的map的key
  • 判断key是否存在,value, ok = map[key]
  • 删除map中的元素, delete(map,key)
  • 新增 map[key] = value
  • 修改 map[key] = value ,如果存在这个key就是修改。
  • 查看map的大小, len(map)
package main

import (
	"fmt"
)

func main() {
	// map定义
	var map1 map[string]int
	// map1初始化
	map1 = make(map[string]int)
	// 在map中,如果key重复了,那么后面的key就会覆盖前面的key
	map1["C"] = 100
	map1["Go"] = 100
	map1["Java"] = 200
	fmt.Println(map1)
	fmt.Println(map1["C"])

	// 在map中没有index的概念,因此我们需要判断key是否存在
	// map中的判断,ok-idiom 是否存在 是一个bool值
	value, ok := map1["C"]
	if ok {
		fmt.Println("map中key存在,value", value)
	} else {
		fmt.Println("map中key不存在")
	}

	// 修改数据
	map1["C"] = 300
	fmt.Println(map1)
	// 如果key存在 那就是直接修改,如果key不存在就是新增的过程
	map1["C++"] = 400
	fmt.Println(map1)

	// 删除数据,delete方法
	delete(map1, "C")
	fmt.Println(map1)
	fmt.Println(len(map1))  // 有几个key len就是多少
}

【3】、map遍历

for k, v := range map1 , key-value,每次打印可能是无序的。

package main

import "fmt"

/*
	遍历map
	 - key、value 无序的,遍历map,可能每次的结果排序都不一致。
	  - "aaa" "aaaaa"
	  - "bbb" "bbbbb"
	  - "ccc" "ccccc"

1、map是无序的,每次打印出来的map可能都不一样,它不能通过index获取,只能通过key来获取
2、map的长度是不固定的,是引用类型的
3、len可以用于map查看map中数据的数量,但是cap无法使用
4、map的key 可以是 布尔类型,整数,浮点数,字符串
*/
func main() {
	var map1 = map[string]int{"C": 100, "java": 200, "Go": 300}
	for k, v := range map1 {
		fmt.Println(k, v)
	}
}

【4】、map结合slice使用

package main

import "fmt"

func main() {
	// map 结合 slice 来使用

	/*
	   需求:
	   1、创建map来存储人的信息,name,age,sex,addr
	   2、每个map保存一个的信息
	   3、将这些map存入到切片中
	   4、打印这些数据
	*/
	user1 := make(map[string]string)
	user1["name"] = "tom"
	user1["age"] = "14"
	user1["addr"] = "tianjin"
	user2 := make(map[string]string)
	user2["name"] = "jim"
	user2["age"] = "16"
	user2["addr"] = "shanghai"
	user3 := map[string]string{"name": "jerry", "age": "55", "addr": "hangzhou"}
	fmt.Println(user3)

	userDate := make([]map[string]string, 0, 3)
	userDate = append(userDate, user1, user2, user3)
	fmt.Println(userDate)
	for _, v := range userDate {
		fmt.Println(v["name"])
	}
}
// 通过map和slice 写一个简单的图书数据库,并可以通过书名或者书号来查询书的位置
package main

import "fmt"

func main() {
	map1 := make(map[string]any)
	map1["name"] = "haha"
	map1["num"] = "1212"
	map1["addr"] = "1-1-3232"
	map2 := make(map[string]any)
	map2["name"] = "xixi"
	map2["num"] = "456"
	map2["addr"] = "1-2-5252"
	map3 := make(map[string]any)
	map3["name"] = "hehe"
	map3["num"] = "44512"
	map3["addr"] = "4-1-3232"

	s1 := make([]map[string]any, 0, 10)
	s1 = append(s1, map1, map2, map3)
	fmt.Println(s1)
	var name string
	fmt.Println("请输入书名")
	fmt.Scan(&name)
	for _, books := range s1 {
		if name == books["name"] {
			fmt.Println(books["addr"])
		}
	}
}

标签:map,string,fmt,数据类型,map1,key,Println
From: https://www.cnblogs.com/xuruizhao/p/18544835

相关文章

  • 数据类型和运算符
    数据类型动态类型编程语言运行时判断静态类型的编程语言:Go、C、在开发的时候,就需要给一些定义的变量赋值空间大小。C需要自己去开辟这个空间数据类型:每种在Go语言中出现的基本数据类型,会有一个默认的空间大小。1、布尔类型数据布尔型的值只可以是常量true或者......
  • CSC3150 memory-mapped files
    CSC3150-Instruction-A3:IntroductionThisassignmentusesxv6,asimpleandUnix-liketeachingoperatingsystem,astheplatformtoguideyouinimplementingthemmapandmunmpsystemcalls.Thesetwoareusedtosharememoryamongprocesesandtomapfil......
  • 散列表-HashMap的增删改查-Java
    在Java中,HashMap 是一种基于散列表的Map接口实现,可以使用null值和null键。以下是对 HashMap<Character,Integer> 进行的增删改查操作:1.增(put) map.put(key,value)、查(get) Integervalue=map.get(key)importjava.util.HashMap;publicclasstest{public......
  • Scala 的Map集合
     Map集合有两种类型,可变的与不可变的,区别在于可变对象可以修改,而不可变对象不可以修改。默认情况下Scala使用不可变Map集合,如果需要使用可变Map集合,则需要显式地使用import导入包。在Scala中,可以同时使用可变与不可变的Map集合,不可变的直接使用Map,可变的使用mutable.Map。1.......
  • 科研绘图系列:R语言功能通路表达热图(heatmap)
    文章目录介绍加载R包数据下载导入数据数据预处理热图:所有通路结果系统信息介绍R语言功能通路表达热图加载R包library(readxl)library(ggpubr)library(ggh4x)library(ggtext)library(tidyverse......
  • Scala 中的Map 映射
    类型:不可变操作:添加元素,删除元素,查询元素,修改元素,遍历一、 不可变的:objectTest10{defmain(args:Array[String]):Unit={//不可变valmap1=Map("鄂"->"湖北省","湘"->"湖南省","青"->"青岛市")}}1)添加元素val......
  • MapReduce初级编程实践:编程实现文件合并和去重操作
    实验环境:操作系统:Linux(Centos7);  Xsell7Hadoop版本:3.4.0(这里的版本根据自己的修改,可能小部分版本的Hadoop不适用于本文实验)对于两个输入文件,即文件A和文件B,请编写MapReduce程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新的输出文件C。下面是输入文件和输出文件......
  • MapReduce初级编程实践:编写程序实现对输入文件的排序
     实验环境:操作系统:Linux(Centos7);  Xsell7Hadoop版本:3.4.0(这里的版本根据自己的修改,可能小部分版本的Hadoop不适用于本文实验)现在有多个输入文件,每个文件中的每行内容均为一个整数。要求读取所有文件中的整数,进行升序排序后,输出到一个新的文件中,输出的数据格式为每行两......
  • 【SigmaPlot 15.0.0.13软件下载与安装教程】
    1、安装包SigmaPlot15:链接:https://pan.quark.cn/s/b5103c671458提取码:1fsQ2、安装教程(过程安装建议关闭杀毒软件)1)       双击SigmaplotInstaller.exe安装,弹窗安装对话框  2)       点击Next   3)       选择Iaccept,点击Next  ......
  • c++(vector、map、list、deque、set)总结-面试
    目录1.vector2.deque3.list4.map5.set6.queue7.stack8.STL容器使用时机希望在面试和学习过程中可以帮助大家梳理重点C++中有两种类型的容器:顺序容器和关联容器。顺序容器主要有vector、list、deque等。其中vector表示一段连续的内存,基于数组实现,list表示非连续......