第一个场景:对某段代码进行N(比如5)次操作。在Java中,需要写个循环,但是在Ruby中,只需要调用一下times方法即可。代码如下:
5.times {print "I love //www.jb51.net/ n"} # 真的就这么简单
# 输出如下:
#I love //www.jb51.net/
#I love //www.jb51.net/
#I love //www.jb51.net/
#I love //www.jb51.net/
#I love //www.jb51.net/
第二个场景:求1到5的数字之和。这个也特别简单:
sum = 0
(1..5).each {|i| sum += i}
print "Sum="+sum.to_s
如果使用upto函数,还可以这样写:
sum = 0
1.upto(5) {|x| sum += x }
print "Sum="+sum.to_s
有时,我们的步进不一定是1,可能是2,例如奇数和。这种情况下,可以使用step函数。代码如下:
sum = 0
1.step(5, 2) do |y| # step函数第二个参数是步进。
sum += y
end
print "Sum="+sum.to_s
感觉有点扯远了。下面,我们讲讲数组相关的迭代器。
数组迭代器
见识过了数字相关的迭代器,我们再看看数组相关的迭代器。
第一个场景:便利数组并输出每个元素。直接上代码:
languages = ['Ruby', 'Javascript', 'Java']
languages.each_with_index do |lang, i|
puts "#{i}, I love #{lang}!"
end
#输出如下:
#0, I love Ruby!
#1, I love Javascript!
#2, I love Java!
有时,我们需要对数组的元素做出一个挑选,这时可以这样干:
# 找出符合条件的值
b = [1,2,3].find_all{ |x| x % 2 == 1 }
# b的值是 [1,3]
有时,我们需要删除数组中的某些值。这时:
# 迭代并根据条件刪除
a = [51, 101, 256]
a.delete_if {|x| x >= 100 }
# a的值是 [51]
再来一个例子:
# 找出最长字串find the longest word
longest = ["cat", "sheep", "bear"].inject do |memo,word|
( memo.length > word.length )? memo : word
end
puts longest
#输出如下:
#sheep
Map迭代器
在Java中,如果相对Map使用迭代器,必须把Map转化成List类型的容器才行。但是,在Ruby中,有直接针对Map的迭代器,很好很方便:
sum = 0
outcome = {"book1"=>1000, "book2"=>1000,"book3"=>4000}
outcome.each{|item, price|
sum += price
}
print "Sum="+sum.to_s
甚至,我们还可以这样:
sum = 0
outcome = {"book1"=>1000, "book2"=>1000,"book3"=>4000}
outcome.each{|pair|
sum += pair[1] # 读取值










