陈斌彬的技术博客

Stay foolish,stay hungry

Ruby - 迭代器

each 迭代器

在很多语言里可以使用 for、while 做循环(Ruby 也可以),但是 Ruby 还有一种独特的循环处理方式,叫做迭代器。比如:

#!/usr/bin/ruby

shuzu = Array[1,2,3,4]

shuzu.each {|n| puts 2*n}

这就是一个 each 迭代器,each 反复调用 大括号中的代码块,将数组的每个元素乘2,打印出来。

代码块可以用 {|x| ……} 形式,也可以是 do |x| …… end 形式。一般情况下我们选择 {} 写法,代码块多行时采用 do end 写法。 刚才的迭代器其实可以用 for 循环实现:

for n in 1..4 do
    puts 2*n
end

但显然使用迭代器更加方便。

collect 迭代器

除了 each 迭代器,还有一种常用的 collect 迭代器。

它们之间的区别是,each 迭代器连续访问集合中的每个元素,而 collect 迭代器从集合中获得各个元素,返回的结果生成新的集合。举例说明更好理解:

shuzu = Array[1,2,3,4]

shuzu_each = shuzu.each {|n| n=2*n}
shuzu_collect = shuzu.collect {|n| n=2*n}

puts "#{shuzu}"
puts "#{shuzu_each}"
puts "#{shuzu_collect}"
puts "#{shuzu}"

运行:

img