版权声明:本文为博主原创文章,未经博主允许不得转载。 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)
}