可枚举的对象
Array、Hash、Range及许多其他类都定义了each迭代器
[1,2,3].each{|x| print x}# prints "123"
(1..3).each{|x| print x} # prints "123"
Ruby的IO类也定义了一个each
File.open(filename) do |f|
f.each{|line| print line}
end
大多数定义了each方法的类都包含Enumerable模块,它定义了许多更特殊的迭代器,
each_with_index
File.open(filename) do |f|
f.each_with_index do |line,number|
print "#{number}:#{line}"
end
end
一些常用的Enumerable迭代器包括collect、select 、 reject及inject
squares=[1,2,3].collect{|x| x*x} #=>[1,4,9]
evens=(1..10).select{|x| x%2==0} #=>[2,4,6,8,10]
reject和select相反
odds=(1..10).reject{|x| x%2==0} #=>[1,3,5,7,9]
data=[2,5,3,4]
sum=data.inject{|sum,x| sum+x} #=>14 (2+5+3+4)
floatProd=data.inject(1.0){|p,x| p*x} #=>120.0 (1.0*2*5*3*4)
max=data.inject{|m,x|m>x?m:x} #=> 5
2011-4-19 14:34 danny
Array、Hash、Range及许多其他类都定义了each迭代器
[1,2,3].each{|x| print x}# prints "123"
(1..3).each{|x| print x} # prints "123"
Ruby的IO类也定义了一个each
File.open(filename) do |f|
f.each{|line| print line}
end
大多数定义了each方法的类都包含Enumerable模块,它定义了许多更特殊的迭代器,
each_with_index
File.open(filename) do |f|
f.each_with_index do |line,number|
print "#{number}:#{line}"
end
end
一些常用的Enumerable迭代器包括collect、select 、 reject及inject
squares=[1,2,3].collect{|x| x*x} #=>[1,4,9]
evens=(1..10).select{|x| x%2==0} #=>[2,4,6,8,10]
reject和select相反
odds=(1..10).reject{|x| x%2==0} #=>[1,3,5,7,9]
data=[2,5,3,4]
sum=data.inject{|sum,x| sum+x} #=>14 (2+5+3+4)
floatProd=data.inject(1.0){|p,x| p*x} #=>120.0 (1.0*2*5*3*4)
max=data.inject{|m,x|m>x?m:x} #=> 5
2011-4-19 14:34 danny