Ruby之each、map、collect、inject、map!、collect!揭秘

本文详细介绍了Ruby中的数组方法,如each、collect、map、inject及其带!的变体。通过具体示例展示了不同方法如何处理数组及它们之间的区别,特别强调了原数组是否会被修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

each   —— 连续访问集合的所有元素,并不生成新的数组;原集合本身不会发生变化
collect —— 从集合中获得各个元素传递给block,block返回的结果生成新的集合。原集合发生变化
map    —— 同collect。

inject  —— 遍历整个集合中的各个元素,将各个元素,按照一定的方式累积,最后返回一个新的元素。原集合本身不会发生变化

map!  和 collect!  一样,返回更改后的数组 遍历对元素内的更改会保存

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

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

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

h2 = h.map{|x| x*2}
h2 = h.collect{|x| x*2}

错误实例:each 循环的话,原集合不发生变化,所以x*2 没有达到需求


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


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!

def map_deep_method  
  arr_test = [1,2,3]  
  arr_test.map do |num|  
    num += 1  
  end  
  arr_test  #[1, 2, 3]  
end  
  
def map1_deep_method  
  arr_test = [1,2,3]  
  arr_test.map! do |num|  
    num += 2   
  end  
  arr_test  #[3, 4, 5]  
end  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值