简单来说:迭代(iterate)指的是重复做相同的事,所以迭代器(iterator)就是用来重复多次相同的事。
迭代器是集合支持的方法。存储一组数据成员的对象称为集合。在 Ruby 中,数组(Array)和哈希(Hash)可以称之为集合。
迭代器返回集合的所有元素,一个接着一个。在这里我们将讨论两种迭代器,each 和 collect。
Ruby each 迭代器
each 迭代器返回数组或哈希的所有元素。
语法
collection.each do |variable| code end
为集合中的每个元素执行 code。在这里,集合可以是数组或哈希。
#!/usr/bin/ruby ary = [1,2,3,4,5] ary.each do |i| puts i end
以上实例运行输出结果为:
1
2
3
4
5
each 迭代器总是与一个块关联。它向块返回数组的每个值,一个接着一个。值被存储在变量 i 中,然后显示在屏幕上。
Ruby collect 迭代器
collect 迭代器返回集合的所有元素。
语法
collection = collection.collect
collect 方法不需要总是与一个块关联。collect 方法返回整个集合,不管它是数组或者是哈希。
实例
#!/usr/bin/ruby a = [1,2,3,4,5] b = Array.new b = a.collect{ |x|x } puts b
以上实例运行输出结果为:
1
2
3
4
5
注意:collect 方法不是数组间进行复制的正确方式。这里有另一个称为 clone 的方法,用于复制一个数组到另一个数组。
当您想要对每个值进行一些操作以便获得新的数组时,您通常使用 collect 方法。例如,下面的代码会生成一个数组,其值是 a 中每个值的 10 倍。
#!/usr/bin/ruby a = [1,2,3,4,5] b = a.collect{|x| 10*x} puts b
以上实例运行输出结果为:
10
20
30
40
50
补充
Java需要把Map转化成List类型的容器才能使用迭代器,但Ruby有直接针对Map的迭代器:
sum = 0 cutcome = {"block1" => 1000, "book2" => 1000, "book3" => 4000} cutcome.each{|item, price| sum += price} print "sum = " + sum.to_s
甚至还可以这样:
sum = 0 cutcome = {"block1" => 1000, "book2" => 1000, "book3" => 4000} cutcome.each{|pair| sum += pair[1]} print "sum = " + sum.to_s
以上就是Ruby 迭代器知识汇总的详细内容,更多关于Ruby 迭代器的资料请关注小牛知识库其它相关文章!
主要内容:Ruby each 迭代器,语法,实例,Ruby collect 迭代器,语法,实例,实例简单来说:迭代(iterate)指的是重复做相同的事,所以迭代器(iterator)就是用来重复多次相同的事。 迭代器是集合支持的方法。存储一组数据成员的对象称为集合。在 Ruby 中,数组(Array)和哈希(Hash)可以称之为集合。 迭代器返回集合的所有元素,一个接着一个。在这里我们将讨论两种迭代器,each 和 collect。 Ruby each 迭代器 each 迭代器返回数组或哈希的
迭代意味着像循环一样多次执行一次事情,它一个接一个返回数组或哈希里面的元素,本章中会为大家介绍 Ruby 都有哪些迭代器。 1. each Ruby 的每个迭代器都从哈希和数组中返回每个元素,最常见的是 each 迭代器。 下面是一个数组的例子。 实例: [1, 2, 3, 4, 5].each do |number| puts number end # ---- 输出结果 ---- 1 2
本文向大家介绍Linux shell知识点汇总,包括了Linux shell知识点汇总的使用技巧和注意事项,需要的朋友参考一下 实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写
本文向大家介绍JSON相关知识汇总,包括了JSON相关知识汇总的使用技巧和注意事项,需要的朋友参考一下 JSON:JavaScript 对象表示法(JavaScript Object Notation) JSON 语法规则 数据在名称/值对中 数据由逗号分隔 花括号保存对象 方括号保存数组 JSON有6种类型的值: 对象、数组、字符串、数字、布尔值、null JSON对象是一个
本文向大家介绍Ruby基础知识之方法、代码段,包括了Ruby基础知识之方法、代码段的使用技巧和注意事项,需要的朋友参考一下 Ruby中的方法是一个有名称的代码块,是与一个或多个对象关联的参数化的代码。调用时须给出方法名,接收者(所在对象),参数值,且最后一个表达式的值做为返回值。与Ruby方法相似的是代码块,它没有名字,且调用时只通过迭代器或被间接调用。 (一)方法 (1)定义方法 定义方法就
本文向大家介绍c++迭代器失效的情况汇总,包括了c++迭代器失效的情况汇总的使用技巧和注意事项,需要的朋友参考一下 一、序列式容器(数组式容器) 对于序列式容器(如vector,deque),序列式容器就是数组式容器,删除当前的iterator会使后面所有元素的iterator都失效。这是因为vetor,deque使用了连续分配的内存,删除一个元素导致后面所有的元素会向前移动一个位置。所以不能使用
本文向大家介绍Node.js 的模块知识汇总,包括了Node.js 的模块知识汇总的使用技巧和注意事项,需要的朋友参考一下 在写 Node.js 应用程序的时候,你确实可以把所有代码放在巨大原 index.js 文件中,不在乎你的应用程序会变得多大多复杂。Node.js 解释器不会在意这个事情。但在代码组织方面,你很快就会陷入混乱,不能理解代码,而且难以调试。所以,作为一个人,你应该关心代码的结构
本文向大家介绍Java内部类知识汇总,包括了Java内部类知识汇总的使用技巧和注意事项,需要的朋友参考一下 Java内部类 一、 含义 在Java编程语言里,程序是由类(class)构建而成的。在一个类的内部也可以声明类,我们把这样的类叫做内部类。 二、 作用 •实现了更好的封装,我们知道,普通类(非内部类)的访问修饰符不能为private或protected,而内部类可以。当我们将内部类声明