Ruby迭代器each、map、collect、inject

说明:

each——连续访问集合的所有元素

collect—-从集合中获得各个元素传递给block,block返回的结果生成新的集合。

map——-同collect。

inject——遍历集合中的各个元素,将各个元素累积成返回一个值。

例子:

defdebug(arr)

puts'--------'

putsarr

end

h=[1,2,3,4,5]

h1=h

h1.each{|v|putssprintf('valuesis:%s',v)}

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

debugh2

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

debugh3

h4=h.inject{|sum,item|sum+item}

#inject()函数如果没有带参数而是直接带的block的话,那么将会把数组的第一个元素复制给sum,数组的第二个值复制给item,每次inject运算完成后将运算结果都保存给sum,item表示数组中的每个元素

#如果inject()函数传递了参数,那么这个参数将会复制给sum,item从元素的第一个值开始,并将每次inject运算后的值赋值给sum

debugh4

结果:

valuesis:1

valuesis:2

valuesis:3

valuesis:4

valuesis:5

--------

1

2

2

4

3

6

4

8

5

10

--------

3

6

9

12

15

--------

15

names=%w[rubyrailsjavapythoncookoofirebody]

等同于:

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!

相关推荐