blcoks和迭代器

简介:
例1:
def three_times
  yield 'tom'
  yield 'jim'
  yield 'lucy'
end
three_times {|name| puts 'hello '+name }
blcok被yield调用,yield可以传递给block 参数
例2:
def fib_up_to(max)
  i1,i2=1,1
   while i1<=max
    yield i1
    i1,i2=i2,i1+i2
  end
end

fib_up_to(1000) {|num| print num,  " "}#注意这里print输出的时候是num," "
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987  

find , each , collect迭代器:
find迭代器用于查找数组中满足条件的元素,并返回元素值
each迭代器用于连续访问数组值
collect用来收集数组元素,并传递给block
例:
[1,3,5,7,9].each{|i| puts i}
a=['H','A','L'].collect {|x|x.succ}
  puts a
----
f= File.open( "/home/elite/NetBeansProjects/song/testfile")
f.each  do |line|
  puts line
end
f.close
inject迭代器:
遍历收集的所有成员以累计出一个值
例:
a=[1,3,5,7].inject(0) {|sum, element| sum+element}
b=[1,3,5,7].inject(1) {|product, element| product*element}
puts a, b
->16
->105
inject的工作过程:block第一次执行时,sum被置为inject的参数(0),element置为收集的第一个元素。接下来每次执行block时,sum被置为上次block被调用的返回值。inject的最后结果是最后一次调用block的返回值。
如果inject没有参数,那么它使用收集的第一个元素作为初始值,并从第二个元素开始迭代!
例:
c=[2,3,4].inject{|sum,element| sum+element}
d=[2,3,4].inject {|product, element| product*element}
puts c, d
->9
->24




本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/64017,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
C++ 容器
迭代器 iterator
迭代器 iterator
|
7月前
|
开发者
迭代器(Iterator)遍历的两种方法(for和while)
迭代器(Iterator)遍历的两种方法(for和while)
|
7月前
|
C++ 容器
C++:迭代器
C++:迭代器
77 0
|
7月前
|
算法 C++ 容器
c++迭代器介绍
C++中的迭代器是一种抽象的数据访问对象,它允许对容器中的元素进行遍历,而不必暴露底层数据结构的细节。迭代器提供了一种通用的方法来访问容器中的元素,无论容器的类型是什么。C++标准库中的许多容器(如vector、list、map等)都支持迭代器。
84 0
|
7月前
自己实现iterator迭代器
自己实现iterator迭代器
|
设计模式 Java Python
迭代器(Iterator)
迭代器(Iterator)是一种设计模式,用于遍历聚合对象的一种方法。迭代器提供了一种方法来访问聚合对象中的元素,而不需要暴露该对象的内部表示。迭代器模式在 Java 和 Python 等编程语言中广泛使用,可以用于处理列表、元组、集合等数据结构。
60 1
|
设计模式 开发框架 .NET
C#——迭代器
C#——迭代器
85 0
C#——迭代器
|
存储 PHP 开发者
lterator 迭代器|学习笔记
快速学习 lterator 迭代器
lterator 迭代器|学习笔记
|
算法 搜索推荐 C++
C++迭代器 iterator详解
C++迭代器 iterator详解
368 0
C++迭代器 iterator详解