首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > Ruby Rails >

Ruby迭代器each、地图、collect、inject

2012-10-19 
Ruby迭代器each、map、collect、inject说明:each——连续访问集合的所有元素collect—-从集合中获得各个元素传递

Ruby迭代器each、map、collect、inject
说明:
each——连续访问集合的所有元素
collect—-从集合中获得各个元素传递给block,block返回的结果生成新的集合。
map——-同collect。
inject——遍历集合中的各个元素,将各个元素累积成返回一个值。
例子:
def debug(arr)
    puts '--------'
    puts arr
end

h = [1,2,3,4,5]
h1 = h
h1.each{|v|puts sprintf('values is:%s',v)}

h2 = h.collect{|x| [x,x*2]}
debug h2

h3 = h.map{|x| x*3 }
debug h3

h4 = h.inject{|sum,item| sum+item}
debug h4   
结果:
values is:1
values is:2
values is:3
values is:4
values is:5
--------
1
2
2
4
3
6
4
8
5
10
--------
3
6
9
12
15
--------
15
names = %w[ruby rails java python cookoo firebody]
等同于:
names = ["ruby", "rails", "java", "python", "cookoo", "firebody"]


arr = [1,2,3]
1) arr2 = arr.each{|element| element = element * 2} #arr与arr2仍然都等于[1,2,3]   each返回原数组 遍历内对元素的更改不会保存
2) arr2 = arr.map{|element| element = element* 2} #arr等于[1,2,3] arr2等于[2,4,6] map返回更改后的数组 遍历内对元素的更改不会保存
3) arr2 = arr.map!{|element| element = element * 2} #arr与arr2都等于[2,4,6] map!返回更改后的数组 遍历对元素内的更改会保存
collect 效果等于 map
collect! 效果等于map!

热点排行