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


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)
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值