(十三)迭代器

(1)迭代器times,each,sort

迭代器就是特殊的循环,能更方便的遍历、排序或其他操作

4.times{
print "hello "
}

4.times{|n|
print n
}
puts "----"
a=[7,8,9]
a.each{
|n|
puts n
}
puts "----"
hashes={"a"=>"one","b"=>222}
hashes.each{
|key,value|
puts "#{key}:#{value}"
}

如下是sort迭代器用于排序

a=[1,2,3,4]
a.sort{|a,b|
b<=>a #表示取出a在前b在后,放回去时b在前a在后,实现反序排列
}
puts a
puts "-------"
a=a.sort{ |a,b|
b<=>a
}
puts a
#sort迭代器也要接收覆盖原来的才能看到改变

(2)自定义迭代器

其实迭代器就是函数而已,我们调用迭代器就跟调用函数的方式一样,我们自己也可以写迭代器:

attr_accessor :title,:author
attr_accessor与它后面的第一个冒号要用空格隔开

class Book
  attr_accessor :title,:author

  def initialize(title,author)
    @author=author
    @title=title
  end
end

class BookList
  def
initialize()
    @book_list=Array.new
  end

  def add(book)
    @book_list.push(book)
  end

  def length
    @book_list.length
  end


  #可以用方括号去获取当前是哪一本书
  def [](n)
    @book_list[n]
  end
  #可以用方括号修改对应下标书籍
  def []=(n,book)
    @book_list[n]=book
  end
  #删除一本书
  def delete(book)
    @book_list.delete(book)
  end
  #自定义一个迭代器,循环输出书的标题
  def each_title
    @book_list.each{
      |book|
      yield(book.title) #yield有专门章节讲解,还是比较重要的一个关键字
    }
  end
end


temp=BookList.new
a=Book.new("001","第一本")
b=Book.new("002","第二本")
temp.add(a)
temp.add(b)
# title对应book.title
temp
.each_title{|title|
puts title
}

时间: 2024-10-10 09:26:09

(十三)迭代器的相关文章

“全栈2019”Java第九十三章:内部类应用场景(迭代器设计模式)

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第九十三章:内部类应用场景(迭代器设计模式) 下一章 "全栈2019"Java第九十四章:局部内部类详解 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习

十三、行为型模式之解释器、迭代器-----《大话设计模式》

一.解释器模式 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 适用:当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式. 缺点:解释器模式为文法中的每一条规则至少定义了一个类,因此包含许多规则的文法可能难以管理和维护.建议当文法非常复杂时,使用其他的计数如语法分析程序或编译生成器来处理. abstract class AbstractExpression { public abstract void In

Python3.5(十三)迭代器&amp;生成器

迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优点是不要求事先准备好整个迭代过程中所有的元素.迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁.这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容 不能随机访问集合中的

设计模式学习(十三) 迭代器模式

场景: -- 提供一种可以遍历聚合对象的方式. 又称为:游标cursor模式 -- 聚合对象:存储数据 -- 迭代器:遍历数据 代码: package com.lp.iterator; //自定义的迭代器接口 public interface MyIterator { void first();//将游标指向第一个元素 void next();//将游标指向下一个元素 boolean hasNext();//判断是否存在下一个元素 boolean isFirst(); boolean isLas

python学习第十三天 迭代器 生成器

1.函数复习总结 # 函数 -- 2天 # 函数的定义和调用 # def 函数名(形参): #函数体 #return 返回值 #调用 函数名(实参) # 站在形参的角度上 : 位置参数,*args,默认参数(陷阱),**kwargs # 站在实参的角度上 : 按照位置传,按照关键字传 # 返回值:没有返回值 返回一个值 返回多个值 # 接收返回值:没有返回值不接收,返回一个值用一个变量接收,返回多个值用一个变量或者对应数目的变量接收 # 闭包函数 -- 在内部函数引用外部函数的变量 # 装饰器函

Python 基础第十三天(迭代器,生成器)

今日主要内容: 1.可迭代对象 2.迭代器 3.生成器 1.可迭代对象 什么是可迭代对象:内部含有__iter__方法的对象,就是可迭代对象. 查看__iter__方法:dir(对象) 可迭代对象就遵循可迭代协议. 接触过的可迭代对象有:str,list,tuple,dict,set,range 迭代器:f1文件句柄 如何判断 法一: 例:s = 'laonanhai' print('__iter__' in dir(s)) 法二: 例:l = [1, 2, 3, 4]from collecti

&lt;C++学习十三&gt;C++迭代器介绍(未完待续)

摘要: 本篇博客仅作为笔记,如有侵权,请联系,立即删除(网上找博客学习,然后手记笔记,因纸质笔记不便保存,所以保存到网络笔记) 迭代器简介: (1)迭代器类似于指针类型,它也提供了对对象的间接访问. (2)指针是C语言中就有的东西,迭代器是C++中才有的,指针用起来灵活高效,迭代器功能更丰富些. (3)迭代器提供一个对容器对象或者string对象的访问方法,并且定义了容器范围. begin end,前面的string和vector容器均有 原文地址:https://www.cnblogs.com

Day4 - 迭代器&amp;生成器、装饰器、Json &amp; pickle 数据序列化、软件目录结构规范

---恢复内容开始--- 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 需求:列表a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求把列表里的每个值加1 1 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 b = [] 3 for i in a: 4 b.append(i+1) 5 a = b 6 print(a) 普通青

winform学习日志(二十三)---------------socket(TCP)发送文件

一:由于在上一个随笔的基础之上拓展的所以直接上代码,客户端: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using Sys