go实现一个切片迭代器
go实现一个简单的切片迭代器
package main
import "fmt"
type iterator struct {
data []int
index int // 索引
}
// 通过简单工厂函数构造一个实例对象
func newIterator(data []int) *iterator {
return &iterator{data: data}
}
// 判断迭代器是否能迭代
func (iter *iterator) HasNext() bool {
if iter.data == nil || len(iter.data) == 0 {
return false
}
return iter.index < len(iter.data)
}
// 迭代器迭代数据
func (iter *iterator) Next() int {
defer func() {
iter.index++
}() // 延時函數在Next函數調用結束後執行defer函數
return iter.data[iter.index]
//iter.index++
}
func main() {
ints := []int{1, 2, 3, 4, 5}
iterator := newIterator(ints)
for iterator.HasNext() {
fmt.Println(iterator.Next())
}
}
切片迭代器(2):支持多类型和封装
说白了就是把一些公共的提取出来封装成对象,这里把上面中的index提取出来,以及切片长度还有判断是否还能迭代的方法提取出来 放在iterator中

package iterator
type Iterator struct {
index int // 索引
len int // 切片长度
}
func (iter *Iterator) HasNext() bool { // 判断切片是否已取完
if iter.len == 0 {
return false
}
return iter.index < iter.len //索引长度一定小于切片长度
}
写支持int类型切片的迭代器

package iterator
type IntIterator struct {
*Iterator
data []int
}
func InterForInt(data []int) *IntIterator {
return &IntIterator{Iterator: &Iterator{len: len(data)}, data: data}
}
func (iter *IntIterator) Next() int {
defer func() {
iter.index++
}() // 延時函數在Next函數調用結束後執行defer函數
return iter.data[iter.index]
//iter.index++
}
写支持strings类型切片的迭代器

package iterator
type StrIterator struct {
*Iterator
data []string
}
func IterForStr(data []string) *StrIterator {
return &StrIterator{Iterator: &Iterator{len: len(data)}, data: data}
}
func (siter *StrIterator) Next() string {
defer func() {
siter.index++
}()
return siter.data[siter.index]
}
go实现一个切片迭代器的更多相关文章
- 遍历一个Set的方法只有一个:迭代器(interator)。
Set-HashSet实现类: 遍历一个Set的方法只有一个:迭代器(interator). HashSet中元素是无序的(这个无序指的是数据的添加顺序和后来的排列顺序不同),而且元素不可重复. 在O ...
- 怎样生成一个顶点迭代器(MItMeshVertex)
最近修改一个maya中的jlCollisionDeformer工具,该工具有一个明显不足,变形后顶点分布太乱,无法满足生产需求.于是考虑对该变形后的顶点进行平滑处理.既然要做平滑处理就要获取当前点及与 ...
- 遍历一个Set的方法只有一个:迭代器(interator)
Set-HashSet实现类: 遍历一个Set的方法只有一个:迭代器(interator). HashSet中元素是无序的(这个无序指的是数据的添加顺序和后来的排列顺序不同),而且元素不可重复. 在O ...
- 自己实现一个each迭代器
什么是迭代器? 其实就是对一个对象内部进行遍历的方法,比如jquery的each方法,或者原生js的foreach方法. 迭代器的特点 针对迭代器,这里有几个特点: ☑ 访问一个聚合对象的内容而无需暴 ...
- Python练习-一个简单易懂的迭代器,了解一下
今天我们学习了迭代器,其实可以理解为是一个元素容器被遍历的方式,不难理解,看看下面的小例子: # 编辑者:闫龙 #一个简单的迭代器 l = [1,2,3,4,5,6,7]#建立一个列表l ite = ...
- 手写一个python迭代器
分析 我们都知道一个可迭代对象可以通过iter()可以返回一个迭代器. 如果想要一个对象称为可迭代对象,即可以使用for,那么必须实现__iter __()方法. 在一个类的实例对象想要变成迭代器,就 ...
- [GO]将随机生成的四位数字拆分后放到一个切片里
package main import ( "math/rand" "time" "fmt" ) func InitData(p *int) ...
- Python的高级特性(切片,迭代,生成器,迭代器)
掌握了python的数据类型,语句和函数,基本上就可以编出很多有用的程序了. 但是在python中,并不是代码越多越好,代码不是越复杂越好,而是越简单越好. 基于这个思想,就引申出python的一些高 ...
- 【Python学习之五】高级特性1(切片、迭代、列表生成器、生成器、迭代器)
1.切片 有一个list—>L = [1,2,3,4,5,6,7]或tuple—>T = (1,2,3,4,5,6,7),如果想取得前三个元素,怎么操作? 硬方法,也是低效的方法是:L= ...
- go语言笔记——切片底层本质是共享数组内存!!!绝对不要用指针指向 slice切片本身已经是一个引用类型就是指针
切片 切片(slice)是对数组一个连续片段的引用(该数组我们称之为相关数组,通常是匿名的),所以切片是一个引用类型(因此更类似于 C/C++ 中的数组类型,或者 Python 中的 list 类型) ...
随机推荐
- Hexo博客Next主题文章置顶相关
我需要写一些文章做推荐相关,需要文章置顶功能 博客效果 置顶方法配置 一.修改库文件 原理 在Hexo生成首页HTML时,将top值高的文章排在前面,达到置顶功能. 修改方法 修改Hexo文件夹下的n ...
- OpenCV4之特征提取与对象检测
1.图像特征概述 图像特征的定义与表示 图像特征表示是该图像唯一的表述,是图像的DNA 图像特征提取概述 传统图像特征提取 - 主要基于纹理.角点.颜色分布.梯度.边缘等 深度卷积神经网络特征提取 - ...
- WPF 中WebBrowser 控件的“允许阻止的内容”修复(引用本地的html页)
解决方法:(个人理解:导致原因就是iE安全机制的问题吧).在你的HTML里面第一行加: <!-- saved from url=(0014)about:internet -->具体原因可以 ...
- Angular: Error: NG0100: ExpressionChangedAfterItHasBeenChecked
错误原因 当变更检测完成后又更改了表达式的值时,Angular就会抛出ExpressionChangedAfterItHasBeenCheckedError 错误,Angular只会在开发模式下抛出此 ...
- 王道oj/problem7(判断数字是否为对称数)
网址:http://oj.lgwenda.com/problem/7 思路:用temp保存原数: 不断对原数进行/10及取余运算,并加到num2中: 最后判断num2是否与temp相等. 代码: #d ...
- [docker]封装python的docker镜像
前言 基于alpine的python镜像封装. docker pull python:3.10-alpine 准备 requirements.txt内容: fastapi uvicorn server ...
- SSM登录操作
1.编写实体类 略 2. 写mapper映射文件 通过名字查询 通过ID主键查询... 略 写dao CRUD相关抽象方法 List<Student> getAll(); Student ...
- ArcMap用一个面要素擦除另一个面要素的部分
本文介绍在ArcMap软件中,基于擦除("Erase")工具,对矢量面要素的部分区域加以剔除的操作. 假如我们已知这样一个研究区域,其包括了陆地与水体两个部分. 与此同 ...
- API技术的使用场景
互联网的发展和普及,API技术也变得越来越重要.API是应用程序接口,它是一种连接不同应用程序或系统之间数据交换和通信的方式.API技术不仅提高了不同应用程序之间的互操作性,还加速了应用程序的开发 ...
- 原来你是这样的SpringBoot--初识SpringBootAdmin
简介 Spring Boot Admin(SBA)是一个针对spring-boot的actuator接口进行UI美化封装的监控工具.它可以:在列表中浏览所有被监控spring-boot项目的基本信息, ...