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实现一个切片迭代器的更多相关文章

  1. 遍历一个Set的方法只有一个:迭代器(interator)。

    Set-HashSet实现类: 遍历一个Set的方法只有一个:迭代器(interator). HashSet中元素是无序的(这个无序指的是数据的添加顺序和后来的排列顺序不同),而且元素不可重复. 在O ...

  2. 怎样生成一个顶点迭代器(MItMeshVertex)

    最近修改一个maya中的jlCollisionDeformer工具,该工具有一个明显不足,变形后顶点分布太乱,无法满足生产需求.于是考虑对该变形后的顶点进行平滑处理.既然要做平滑处理就要获取当前点及与 ...

  3. 遍历一个Set的方法只有一个:迭代器(interator)

    Set-HashSet实现类: 遍历一个Set的方法只有一个:迭代器(interator). HashSet中元素是无序的(这个无序指的是数据的添加顺序和后来的排列顺序不同),而且元素不可重复. 在O ...

  4. 自己实现一个each迭代器

    什么是迭代器? 其实就是对一个对象内部进行遍历的方法,比如jquery的each方法,或者原生js的foreach方法. 迭代器的特点 针对迭代器,这里有几个特点: ☑ 访问一个聚合对象的内容而无需暴 ...

  5. Python练习-一个简单易懂的迭代器,了解一下

    今天我们学习了迭代器,其实可以理解为是一个元素容器被遍历的方式,不难理解,看看下面的小例子: # 编辑者:闫龙 #一个简单的迭代器 l = [1,2,3,4,5,6,7]#建立一个列表l ite = ...

  6. 手写一个python迭代器

    分析 我们都知道一个可迭代对象可以通过iter()可以返回一个迭代器. 如果想要一个对象称为可迭代对象,即可以使用for,那么必须实现__iter __()方法. 在一个类的实例对象想要变成迭代器,就 ...

  7. [GO]将随机生成的四位数字拆分后放到一个切片里

    package main import ( "math/rand" "time" "fmt" ) func InitData(p *int) ...

  8. Python的高级特性(切片,迭代,生成器,迭代器)

    掌握了python的数据类型,语句和函数,基本上就可以编出很多有用的程序了. 但是在python中,并不是代码越多越好,代码不是越复杂越好,而是越简单越好. 基于这个思想,就引申出python的一些高 ...

  9. 【Python学习之五】高级特性1(切片、迭代、列表生成器、生成器、迭代器)

    1.切片 有一个list—>L = [1,2,3,4,5,6,7]或tuple—>T = (1,2,3,4,5,6,7),如果想取得前三个元素,怎么操作? 硬方法,也是低效的方法是:L= ...

  10. go语言笔记——切片底层本质是共享数组内存!!!绝对不要用指针指向 slice切片本身已经是一个引用类型就是指针

    切片 切片(slice)是对数组一个连续片段的引用(该数组我们称之为相关数组,通常是匿名的),所以切片是一个引用类型(因此更类似于 C/C++ 中的数组类型,或者 Python 中的 list 类型) ...

随机推荐

  1. 使用docker构建可动态启动的FreeSWITCH实例

    操作系统 :CentOS 7.6_x64 FreeSWITCH版本 :1.10.9 Docker版本:23.0.6   使用docker打包FreeSWITCH可以极大简化部署环节,但针对高可用场景的 ...

  2. 家人们,我把B站首页写出来了!!!

    在学习HTML5和CSS3的过程中,总是感觉没有一个完全自己做出来的页面,一直在各大网站上面寻找合适的适合自己去仿写的页面代码,奈何找了很久都没有找到,在CSDN上找的各种什么电商页面,小米商城页面之 ...

  3. .NET for Apache Spark 入门演练

    .NET for Apache Spark 入门演练 微软官方文档: .NET for Apache Spark 入门 | Microsoft Learn 注意:由于本次在windows平台下进行演练 ...

  4. 2021-10-09 Core学习

    控制器学习 如果有ID参数,根据前面定义的{controller=Home}/{action=Index}/{id?} 可以换成一下格式 页面学习 视图 基架搭建 然后在nuget控制台添加 Add- ...

  5. React:如何在普通函数中使用Hook

    解决方案

  6. 2.go语言基础类型漫游

    本篇前瞻 本篇是go语言的基础篇,主要是帮助大家梳理一下go语言的基本类型,注意本篇有参考go圣经,如果你有完整学习的需求可以看一下,另外,go语言的基本类型比较简单,介绍过程就比较粗暴. 基本类型 ...

  7. 文心一言 VS 讯飞星火 VS chatgpt (80)-- 算法导论7.4 5题

    五.如果用go语言,当输入数据已经"几乎有序"时,插入排序速度很快.在实际应用中,我们可以利用这一特点来提高快速排序的速度.当对一个长度小于 k 的子数组调用快速排序时,让它不做任 ...

  8. Jmeter逻辑控制器Switch Controller的用法

    一.概述 类似编程语言中的switch函数,Switch Controller根据给定的值n(可使用变量)选择执行其下的 第n+1个子节点. 作用:Switch Controller通过给该控制器中的 ...

  9. 如何使用Java + React计算个人所得税?

    前言 在报表数据处理中,Excel公式拥有强大而多样的功能,广泛应用于各个业务领域.无论是投资收益计算.财务报表编制还是保险收益估算,Excel公式都扮演着不可或缺的角色.传统的做法是直接依赖Exce ...

  10. 华为云ECS上搭建Hadoop集群环境启动时报错“java.net.BindException: Cannot assign requested address”问题的解决

    启动时使用: ./sbin/start-all.sh 1 报错: java.net.BindException: Problem binding to [test7972:9000] java.net ...