[日常]go语言圣经-指针对象的方法-bit数组习题2

陶士涵的菜地 陶士涵的菜地     2022-11-04     752

关键词:

练习 6.3: (*IntSet).UnionWith会用|操作符计算两个集合的交集,我们再为IntSet实现另外的几个函数IntersectWith(交集:元素在A集合B集合均出现),DifferenceWith(差集:元素出现在A集合,未出现在B集合),SymmetricDifference(并差集:元素出现在A但没有出现在B,或者出现在B没有出现在A)。

*练习6.4: 实现一个Elems方法,返回集合中的所有元素,用于做一些range之类的遍历操作。

练习 6.2: 定义一个变参方法(*IntSet).AddAll(...int),这个方法可以添加一组IntSet,比如s.AddAll(1,2,3)。

/*
练习 6.3: (*IntSet).UnionWith会用|操作符计算两个集合的交集,我们再为IntSet实现另外的几个函数IntersectWith(交集:元素在A集合B集合均出现),DifferenceWith(差集:元素出现在A集合,未出现在B集合),Sym
metricDifference(并差集:元素出现在A但没有出现在B,或者出现在B没有出现在A)。
*/
//交集:元素在A集合B集合均出现
func (s *IntSet) IntersectWith(t *IntSet) IntSet 
        var result IntSet
        for i, word := range s.words 
                if i >= len(t.words) 
                        break
                   
                result.words = append(result.words, word&t.words[i])
           
        return result


//差集:元素出现在A集合,未出现在B集合
func (s *IntSet) DifferenceWith(t *IntSet) IntSet 
        var result IntSet
        for i, word := range s.words 
                if i >= len(t.words) 
                        result.words = append(result.words, word)
                        continue
                   
                result.words = append(result.words, word&(word^t.words[i]))
           
        return result


//并差集:元素出现在A但没有出现在B,或者出现在B没有出现在A
func (s *IntSet) SymmetricDifference(t *IntSet) IntSet 
        var result IntSet
        for i, word := range s.words 
                if i >= len(t.words) 
                        result.words = append(result.words, word)
                        continue
                   
                result.words = append(result.words, word^t.words[i])
           
        return result


//练习6.4: 实现一个Elems方法,返回集合中的所有元素,用于做一些range之类的遍历操作。
func (s *IntSet) Elems() []int 
        var result []int
        for i, word := range s.words 
                for j := 0; j < 64; j++ 
                        if word&(1<<uint(j)) != 0  
                                result = append(result, 64*i+j)
                           
                   
           
        return result

//练习 6.2: 定义一个变参方法(*IntSet).AddAll(...int),这个方法可以添加一组IntSet,比如s.AddAll(1,2,3)。
func (s *IntSet) AddAll(elements ...int) 
        for _, r := range elements 
                s.Add(r)
        

  

[日常]go语言圣经--channel习题

练习8.3:在netcat3例子中,conn虽然是一个interface类型的值,但是其底层真实类型是*net.TCPConn,代表一个TCP连接。一个TCP连接有读和写两个部分,可以使用CloseRead和CloseWrite方法分别关闭它们。修改netcat3的主goroutine代码,只关闭网... 查看详情

[日常]go语言圣经--接口约定习题

Go语言圣经-接口1.接口类型是对其它类型行为的抽象和概括2.Go语言中接口类型的独特之处在于它是满足隐式实现的3.Go语言中还存在着另外一种类型:接口类型。接口类型是一种抽象的类型4.一个类型可以自由的使用另一个满足相... 查看详情

[日常]go语言圣经--示例:并发的echo服务

最简单的回声服务器:packagemainimport("io""net""log")funcmain()listener,err:=net.Listen("tcp",":8040")iferr!=nillog.Fatal(err)forconn,err:=listener.Accept()iferr!=nillog.Print(err)//e.g.,connectionabortedc 查看详情

[日常]go语言圣经-goroutines和线程

Goroutines和线程:1.动态栈: 1)线程都有一个固定大小的内存块(一般会是2MB)来做栈 2)一个goroutine会以一个很小的栈开始其生命周期,一般只需要2KB,不是固定的;栈的大小会根据需要动态地伸缩2.Goroutine调度: 1)线程是使用硬件定时器... 查看详情

[日常]go语言圣经--复数,布尔值,字符串习题

go语言圣经-复数1.我们把形如a+bi(a,b均为实数)的数称为复数,其中a称为实部,b称为虚部,i称为虚数单位。两种精度的复数类型:complex64和complex128,分别对应float32和float64两种浮点数精度2.complex函数用于构建复数,real和imag函数... 查看详情

[日常]go语言圣经-匿名函数习题2

练习5.13:修改crawl,使其能保存发现的页面,必要时,可以创建目录来保存这些页面。只保存来自原始域名下的页面。假设初始页面在golang.org下,就不要保存vimeo.com下的页面。packagemainimport("fmt""io""io/ioutil""links""log""net/http""net/url... 查看详情

[日常]go语言圣经-示例:并发的目录遍历习题

练习8.9:编写一个du工具,每隔一段时间将root目录下的目录大小计算并显示出来。packagemainimport(//"filepath""flag""fmt""io/ioutil""os""path""sync""time")/*练习8.9:编写一个du工具,每隔一段时间将root目录下的目录大小计算并显示出来。*///接... 查看详情

[日常]go语言圣经--作用域,基础数据类型,整型

go语言圣经-作用域1.一个声明语句将程序中的实体和一个名字关联,比如一个函数或一个变量2.一个变量的生命周期是指程序运行时变量存在的有效时间段;声明语句的作用域对应的是一个源代码的文本区域,它是一个编译时的属性... 查看详情

[日常]go语言圣经-基于select的多路复用习题

练习8.8: 使用select来改造8.3节中的echo服务器,为其增加超时,这样服务器可以在客户端10秒中没有任何喊话时自动断开连接。reverb3.gopackagemainimport("bufio""fmt""log""net""strings""sync""time")funcmain()listener,err:=net.Listen("tcp",":8040")iferr 查看详情

[日常]go语言圣经--示例:并发的clock服务习题(代码片段)

练习8.1: 修改clock2来支持传入参数作为端口号,然后写一个clockwall的程序,这个程序可以同时与多个clock服务器通信,从多服务器中读取时间,并且在一个表格中一次显示所有服务传回的结果,类似于你在某些办公室里看到... 查看详情

go语言之指针

...函数len(array)获取其长度。在开始前先了解指针与地址:Go语言中指针是很容易学习的,Go语言中使用指针可以更简单的执行一些任务,变量是一 查看详情

go语言圣经

今天将传说中的《Go语言圣经》,也就是《TheGoProgrammingLanguage》的中文版读完了。这本书鞭辟入里,读后醍醐灌顶。很大程度上提升了自己对Go代码编写的思维。尤其是在写过一段时间Go代码后,很多疑问顿时消解,甚是畅快淋漓... 查看详情

go语言|03数组指针切片用法(代码片段)

文章目录Go语言数组声明数组访问数组元素多维数组Go语言指针如何使用指针指针数组指向指针的指针指针作为函数参数Go语言切片(Slice)定义切片切片初始化len()和cap()函数切片截取append()和copy()函数Go语言数组Go语言提供了数组类... 查看详情

go语言基础函数,数组,指针,结构体(代码片段)

...回值为什么闭包不会被垃圾回收defer内置函数panic、recover语言变量作用域数组数组定义数组+函数+宏定义二维数组指针make和new的区别二级指针的使用空指针指针数组将指针传入函数进行值的交换结构体自定义类型和类型别... 查看详情

go语言入门四(复合类型数组切片指针)(代码片段)

...类型复合类型:把基础类型封装起来了。指针指针可是c语言中的重头戏,指针数组数组指针函数指针指针函数回调函数回调函数的数组一级指针二级指针三四五。。。。c语言指针有可以进行判断进行+-等操作go语言是不行的go语... 查看详情

javascript--数组方法学习(代码片段)

...文献这个方法比较有意思,可以将一个类似数组或可迭代对象分割,然后将值返回为一个新数组伪数组对象(拥有一个length属性和若干索引属性的任意对象)可迭代对象](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/iterable)(... 查看详情

go语言学习--指针数组和数组指针

数组指针(也称行指针)定义int(*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,... 查看详情

20220712go语言基础知识

基础1.内置函数2.流程控制2.1.if与switch2.1.1.if2.1.2.switch2.2.for3.指针3.1.指针地址和指针类型3.2.指针取值3.3.空指针4.数组Array4.1.数组定义4.2.数组定义4.3.与数组相关的函数5.切分Slice5.1.切分Slice定义5.2.切分Slice初始化5.3.cap与len5.4.操作... 查看详情