Go数据结构与算法-给List添加迭代器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yang731227/article/details/84988638

title: Go数据结构与算法-给List添加迭代器
tags: go,算法


介绍

在上篇我们用切片实现了List,在之前我们是通过下标来遍历或者查询数据,现在我们来添加迭代器,使我们的List更合理。

演示

//本章代码依赖与上一篇
package main

import (
	"errors"
)


//迭代器
type Iterator interface {
	HasNext() bool//判断是否有下一个
	Next()(interface{},error) //获取下一个
	Remove()//删除
	getindex()int
}
type Iterable interface {
	Iterator () Iterator //构造迭代器
}
type ArrayListIterator struct{
	list * ArrayList  //数组指针
	currentindex  int //当前的索引
}
func (list * ArrayList ) Iterator() Iterator{
	iterator:=new(ArrayListIterator) //创造迭代器
	iterator.currentindex=0
	iterator.list=list //指针传递
	return iterator  //返回迭代器,驾驭数组
}

func  (it *ArrayListIterator)getindex() int {
	return it.currentindex
}

func  (it *ArrayListIterator)HasNext() bool{
	return it.currentindex <it.list.Size()  //存在下一个
}
func  (it *ArrayListIterator)Next()(interface{},error){
	if !it.HasNext(){
		return nil,errors.New("没有数据")
	}
	value,err:=it.list.Get(it.currentindex)//提取上一个
	it.currentindex++
	return value,err
}
func  (it *ArrayListIterator)	Remove(){
	it.currentindex--
	it.list.Remove(it.currentindex) //删除
}

func main() {
	list :=New()
	list.Append(1)
	fmt.Println(list)
	list.Append(2)
	fmt.Println(list)
	list.Append(3)
	fmt.Println(list)
	list.Append(4)
	fmt.Println(list)
	for it:=list.Iterator();it.HasNext();{
		item,_:=it.Next()
		if item==3{
			it.Remove()
		}
		fmt.Println(item)
	}
	fmt.Println(list)
}

猜你喜欢

转载自blog.csdn.net/yang731227/article/details/84988638