首页 > 其他分享 >第六篇:自定义集合类型和结构体取代类

第六篇:自定义集合类型和结构体取代类

时间:2023-04-03 20:57:47浏览次数:41  
标签:set string 自定义 make person func 集合 fmt 第六篇

第六篇:自定义集合类型和结构体取代类

目录

一、自定义集合类型

集合是一个重要的数据结构,其中,集合中的元素不能重复;集合中的元素无序排列,由于go中没有集合元素,我们可以通过map实现一个集合元素,使其具备。

增加元素:set

删除元素:delete

判断元素是否存在:isExist

查看集合长度:len

//定义MySet类型
type MySet map[interface{}]bool
//判断元素是否存在
func (m MySet) isExist(a interface{}) bool {
	return m[a]
}
//返回set长度
func (m MySet) len() int {
	return len(m)  // 统计map的长度
}
//设置值
func (m MySet) set(a interface{}) {
	m[a] = true
}
//删除值
func (m MySet) delete(a interface{}) {
	delete(m, a)
}

//测试代码
func main() {
	//创建一个set
	var a MySet = make(MySet)  // 应用类型必须进行初始化,相当于 var a MySet = make(map[interface{}]bool)
	//打印set的长度
	fmt.Println(a.len())
	//放入一个值
	a.set(1)
	//放入一个相同值
	a.set(1)
	a.set("yangyi")
	a.set("yangyi")
	a.set("yangyi")
	//打印长度,还是1
	//fmt.Println(a.len())
	//判断1是否存在
	//fmt.Println(a.isExist(2))
	////删除1
	a.delete(1)
	////判断1是否存在
	fmt.Println(a.isExist(1))
	fmt.Println(a.len())

	for i,_:=range a{
		fmt.Println(i)
	}
}

二、结构体取代类

1 make和new的区别

make是引用类型初始话时使用。

make返回的是Type的具体的值,new返回的是指向Type类型的指针【也不是nil】。

// make
var a map[int]string = make(map[int]string)  // a本来是nil,make之后有值

// new
var a *map[int]string = new(map[int]string)

var duck = new(PDuck)    <===>   var duck = &PDuck{}  

make创造的是具体的类型,比如make([]int, 3, 4),创造出的是引用类型;而new创造出来的是指向该引用类型的指针。

2 结构体取代类

package main

import "fmt"

type Person struct {
	Name string
	Age int
	Gender string
}

func New(name string, age int, gender string) Person{
	return Person{name, age, gender}  // Go语言可以返回局部变量的引用
}

func main() {
	person := New("yangyi", 18, "male")
	fmt.Println(person)  // {yangyi 18 male}
}

可以把一个包可以当作一个类,具体方式如下所示。

// person包的person_class.go文件下定义
package person

import "fmt"

type Person struct {
	Name string
	Age int
	Gender string
}

// 创建结构体对象
func New(name string, age int, gender string) Person{
	return Person{name, age, gender}
}

// 类调用方法
func (p *Person)TellName()  {
	fmt.Println(p.Name)
}

// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

package main

import (
	"day01/person"
)

func main() {
	// 第一种方式
	var person person.Person = person.New("yangyi", 18, "male")
	// 第二种方式
	person := person.New("yangyi", 18, "male")
	
	// 对象调用方法
	person.TellName()  // 方法调用
}

标签:set,string,自定义,make,person,func,集合,fmt,第六篇
From: https://www.cnblogs.com/yangyi215/p/17284377.html

相关文章

  • 设计模式(三十一)----综合应用-自定义Spring框架-自定义Spring IOC-定义解析器、IOC容
    3定义解析器相关类3.1BeanDefinitionReader接口BeanDefinitionReader是用来解析配置文件并在注册表中注册bean的信息。定义了两个规范:获取注册表的功能,让外界可以通过该对象获取注册表对象。加载配置文件,并注册bean数据。/***@versionv1.0*@ClassName:BeanDe......
  • PL/SQL 基础---复杂数据类型和自定义类型
    原文地址:https://blog.csdn.net/villare/article/details/53437924PL/SQL基础—复杂数据类型和自定义类型PLSQL中常用的自定义类型就两种:记录类型、PLSQL内存表类型(根据表中的数据字段的简单和复杂程度又可分别实现类似于简单数组和记录数组的功能)除此之外,还有大对象类型:CLOB......
  • 对list中的字段进行自定义排序,最后放在LinkedHashMap中
    List<ProjectVO>projectList=dbProjectService.getProjectList();这里面如果第一个字段是如下的顺序:"成都分公司","北京分公司","上海分公司","深圳分公司","广州分公司","重庆分公司"Map<String,List<ProjectVO>>map=projectL......
  • 游记集合帖
    对于我这种记忆力不是很好的人,关于之前的很多记忆都已经忘却了,写写游记,希望能在之后的若干年里回忆起现在。毕竟记忆忘却真的是一件很痛苦的事情。NOIST2023游记2023联合省选游记......
  • Pycharm创建自定义代码片段
    简介PyCharm允许您创建自定义代码片段,也称为代码模板,以提高您的开发效率实现步骤1.添加代码模板打开PyCharm并导航到File->Settings,或者按快捷键ctrl+alt+s打开设置​按照如下序号步骤进行点击,点击“+”按钮以创建新的代码模板,选择LiveTemplate,此处可以看到很多pych......
  • 3_集合
    集合集合大家庭:四种集合的概述:List特点:有序、可重复ArrayList:Object[]数组LinkedList:双向链表(JDK1.6之前为循环链表,JDK1.7取消了循环),一般不用哈哈分析:以上两种,均为不同步,即不保证线程安全。二者的插入和删除元素复杂度是否受元素位置影响以及是否支持快速......
  • bootstrap之carousel轮播图自定义分页器
    最近要开发一个轮播图的看板页面,试用下bootstrap的轮播图组件,因为分页器的部分需要自定义(文字过长需要放到轮播图区域的外面),使用 Listgroup组件作为轮播图的分页器放在左边。 <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metahttp-equiv=......
  • 直播平台开发,小程序自定义搜索标题栏
    直播平台开发,小程序自定义搜索标题栏一:需求把微信小程序标题栏处变成搜索栏。自定义返回上级页面。二:需求分析首先要把小程序标题栏设置为可自定义。然后计算原标题栏的高度组成结构。根据计算高度设置搜索框和返回按钮的布局。最后进行代码功能实现。三:功能实现1:设置标......
  • vue3 ant-Design-vue提交按钮放在表单外提交,自定义提交按钮
    <template><a-formref="urlEditRef":model="urlEditInfo"name="urlEdit_rule"layout="vertical"><a-form-itemlabel="跳转链接"name="longUrl":rules=&qu......
  • 【pytest】 pytest自定义标记 PytestUnknownMarkWarning处理方式
    未注册标记会出现warningssummary-- PytestUnknownMarkWarningPytestUnknownMarkWarning:Unknownpytest.mark.demo-isthisatypo?Youcanregistercustommarkstoavoidthiswarning-fordetails,seehttps://docs.pytest.org/en/stable/how-to/mark.html@......