Go语言学习 _基础04 _Map&Set

1、map
package map_test

import (
"fmt"
"testing"
) func TestInitMap(t *testing.T) {
m1 := map[int]int{1: 1, 2: 4, 3: 9} // 初始化方式一 声明 并初始化
t.Log(m1[2])
t.Logf("len m1 = %d", len(m1))
m2 := map[int]int{} // 初始化方式二 声明 不初始化
m2[4] = 16
t.Logf("len m2 = %d", len(m2))
m3 := make(map[int]int, 10) // key-walue : int-int cap = 10
// 初始化方式三 通过 make函数 (map 的 key 和 value 都不是 确定的 大小可能不一 所以 map的 make方法 没有len参数)
t.Logf("len m3 = %d", len(m3))
} func TestAccessNotExistingkey(t *testing.T) {
m1 := map[int]int{}
t.Log(m1[1])
m1[2] = 0
t.Log(m1[2]) // 对于不存在的 键值 会被 默认输出 0 ,那么这样和 初始化wei0 就很难区分了 吗? Go中 需要进行手动的 区分
m1[3] = 0
isExit(m1, 3)
isExit(m1, 4)
} // TODO 手动判断 键值 是否存在
func isExit(m map[int]int, k int) {
if v, ok := m[k]; ok {
fmt.Printf("Key %d 's value is %d", k, v)
} else {
fmt.Printf("Key %d is not exiting !", k)
}
} func TestTravelMap(t *testing.T) {
m1 := map[int]int{1: 1, 2: 4, 3: 9}
for k, v := range m1 { // 通过range遍历 map
t.Log(k, v)
}
}
// 通过 Map 实现 工厂模式 TODO 以后 后面会 加一个 Java 实现的 比较 看看 Go 的简洁
func TestMapWithFunValue(t *testing.T){
m := map[int]func(op int) int{}
m[1] = func(op int) int { return op}
m[2] = func(op int) int { return op*op}
m[3] = func(op int) int { return op*op*op}
t.Log(m[1](2),m[2](2),m[3](2))
}
2、set

Go语言中 没有 set 不过 可以 通过 Map 来 模拟 set 使用 key 作为 集合元素 使用 bool 作为 值 true 表示 存在

package set_test

import (
"fmt"
"testing"
)
// TODO Go语言中 没有 set 不过 可以 通过 Map 来 模拟 set 使用 key 作为 集合元素 使用 bool 作为 值 true 表示 存在
func TestMapForSet(t *testing.T) {
mySet := map[int]bool{}
mySet[1] = true
n := 3
isExiting(mySet, n)
mySet[3] = true
t.Log(len(mySet))
delete(mySet, 1) // 删除 元素
isExiting(mySet, n)
}
func isExiting(set map[int]bool, k int) {
if set[k] {
fmt.Printf("%d is exiting", k)
} else {
fmt.Printf(" %d is not exiting !",k)
}
}

Go语言学习 _基础04 _Map&Set的更多相关文章

  1. Groovy语言学习--语法基础(5)

    至此groovy语言学习-语法基础就结束了,新的工作已经安排下来,要干活了. 对groovy了解到一定程度之后就可以在java项目中对其进行引入了.为此新建了一个微型的项目,个人觉得千言万语不如代码实 ...

  2. Groovy语言学习--语法基础(1)

    2018年11月末,从上家公司离职后进入现在的公司.进入项目以来,发现项目中有很多groovy脚本,以前没接触过groovy,抽时间系统地学一下,也方便后期项目的开发和维护. groovy和java的 ...

  3. 01_c语言再学习_基础部分(1)

    目录: 1.编译基础 2.c语言关键字 3.c语言数据类型 4.二进制/8进制/16进制 5.计算机内存数值存储方式:sizeof/原码/反码/补码 6.c语言中的字符和字符串 7.c语言中的数组和字 ...

  4. oc语言学习之基础知识点介绍(五):OC进阶

    一.点语法介绍 /* 以前封装后,要给属性赋值,必须调用方法 这样做,有两个缺点: 1.代码量多,调用方法要写的东西多. 2.看起来并不像是给属性赋值,也不像取值. 我们用点语法就可以更好的解决! 点 ...

  5. oc语言学习之基础知识点介绍(一):OC介绍

      一.第一个OC程序 #import <Foundation/Foundation.h> //导入头文件 int main(int argc, const char * argv[]) ...

  6. c语言学习之基础知识点介绍(四):算术运算符和逗号表达式

    本节主要介绍c语言中运算符. 运算符主要分为四类: 1.算术运算符 加(+),减(-),乘(*),除(/),取余(%,两数相除,得到余数) 2.关系运算符 3.逻辑运算符 4.换位运算符 下面将依次介 ...

  7. c语言学习之基础知识点介绍(三):scanf函数

    本节继续介绍c语言的基础知识点. scanf函数:用来接收用户输入的数据. 语法:scanf("格式化控制符",地址列表); 取地址要用到取地址符:&(shift+7) 例 ...

  8. c语言学习之基础知识点介绍(二):格式化控制符和变量的补充

    上节简单介绍了c语言中的一些基础知识点,本节将对之前介绍的不够详细的知识点进行补充. 格式化控制符的消息介绍: %d的其他控制符: 1.%md:m代表这个整数位占用多少位,m是一个整数.实际数字不足的 ...

  9. c语言学习之基础知识点介绍(一):输出语句和变量简单介绍

    本系列是为了学习ios做准备的,也能作为c语言入门的教程看看. c语言的程序结构: 1.顺序结构:自上而下依次执行. 2.分支结构:程序有选择的执行某段代码或者不执行某段代码. 3.循环结构:程序循环 ...

  10. C语言学习_一个简单程序的解释与C学习方法概括

    简单计算器程序示例: # include <stdio.h> //1.头文件 //2.加法函数 int add(int a,int b)//3.函数定义方式 { //4.函数体 retur ...

随机推荐

  1. 读论文《IMPALA: Scalable Distributed Deep-RL with Importance Weighted Actor-Learner Architectures》——(续)实验部分

    论文地址: https://arxiv.org/pdf/1802.01561v2.pdf 论文<IMPALA: Scalable Distributed Deep-RL with Importa ...

  2. Ubuntu系统:NVIDIA显卡关闭图形显示 —— 彻底禁用NVIDIA GPU 的显示输出接口 —— ubuntu无桌面方式启动 —— NVIDIA显卡模式切换(显示模式切换为计算模式)

    相关: ubuntu desktop改用无桌面方式启动 在使用Linux做异构计算等科学计算的时候一个常见的问题就是: NVIDIA显卡关闭图形显示 -- 彻底禁用NVIDIA GPU 的显示输出接口 ...

  3. vue3的defineAsyncComponent是如何实现异步组件的呢?

    前言 在上一篇 给我5分钟,保证教会你在vue3中动态加载远程组件文章中,我们通过defineAsyncComponent实现了动态加载远程组件.这篇文章我们将通过debug源码的方式来带你搞清楚de ...

  4. 推荐一个优秀的 .NET MAUI 组件库

    前言 .NET MAUI 的发布,项目中可以使用这个新的跨平台 UI 框架来轻松搭建的移动和桌面应用. 为了帮助大家更快地构建美观且功能丰富的应用,本文将推荐一款优秀的 .NET MAUI 组件库MD ...

  5. 【牛客刷题】HJ4 字符串分隔

    题目链接 这个题目本身基本上是对语言熟悉程度的考察,没有什么别的逻辑可言: package main import ( "fmt" "strings" ) fu ...

  6. VIM正则替换行尾

    https://nfcwar.lofter.com/post/1d1ee5d7_670890a 替换/删除某个字符后面的所有内容::%s/b.*/c/g   删除b后面所有的字符,以c替换.用g表示全 ...

  7. HTB-BoardLight靶机笔记

    BoardLight靶机笔记 概述 HTB的靶机BoardLight 靶机地址:https://app.hackthebox.com/machines/BoardLight 一.nmap扫描 1)端口 ...

  8. 最详细STL(二)deque

    deque其实也是数组,也可以动态的添加和减少元素,但是和vector不同的是,deque可以快速的在头部和尾部添加减少元素(vector只能快速的在尾部添加),然而在插入元素的时候因为头部和尾部都可 ...

  9. C#项目—模拟考试

    C#模拟考试软件 开发了一个<模拟考试>的小软件,此小软件练习的目的主要是为了体会编程思想,深度理解高内聚.低耦合,掌握编程思维逻辑的大招,告别垃圾代码,重点体会编程之美,练习时长30分钟 ...

  10. Gson toJson 忽略 long 为 0的数据

    起因于数据id过大,所以将对应int , Integer都修改为long, 测试过程中发现 Gson toJson时,字段将int为0的数据忽略,但long 没有, 所以 1. 新增适配器 impor ...