mko*_*mko 62 ruby each collect
从这段代码我不知道两种方法之间的区别,collect和each.
a = ["L","Z","J"].collect{|x| puts x.succ} #=> M AA K
print a.class #=> Array
b = ["L","Z","J"].each{|x| puts x.succ} #=> M AA K
print b.class #=> Array
Run Code Online (Sandbox Code Playgroud)
Ram*_*Vel 108
Array#each获取一个数组并将给定的块应用于所有项目.它不会影响数组或创建新对象.它只是循环项目的一种方式.它也回归自我.
arr=[1,2,3,4]
arr.each {|x| puts x*2}
Run Code Online (Sandbox Code Playgroud)
打印2,4,6,8并返回[1,2,3,4]无论如何
Array#collectArray#map与它相同并且它在所有项上应用给定的代码块并返回新数组.简单地将'将一个序列的每个元素投影到一个新形式'
arr.collect {|x| x*2}
Run Code Online (Sandbox Code Playgroud)
退货[2,4,6,8]
在你的代码中
a = ["L","Z","J"].collect{|x| puts x.succ} #=> M AA K
Run Code Online (Sandbox Code Playgroud)
a是一个数组,但它实际上是一个Nil的数组[nil,nil,nil]因为puts x.succ返回nil(即使它打印的是M AA K).
和
b = ["L","Z","J"].each{|x| puts x.succ} #=> M AA K
Run Code Online (Sandbox Code Playgroud)
也是一个数组.但它的值是["L","Z","J"],因为它返回自我.
Tom*_*Tom 38
Array#each只需获取每个元素并将其放入块中,然后返回原始数组.Array#collect获取每个元素并将其放入一个返回的新数组中:
[1, 2, 3].each { |x| x + 1 } #=> [1, 2, 3]
[1, 2, 3].collect { |x| x + 1 } #=> [2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
each当你想迭代一个数组,并在每次迭代中做任何你想做的事情时.在大多数(命令性)语言中,这是程序员在您需要处理列表时所达到的"一刀切"的锤子.
对于更多功能语言,如果您不能以任何其他方式执行此操作,则只执行此类通用迭代.大多数情况下,map或reduce更合适(收集并注入红宝石)
collect 是想要将一个数组转换为另一个数组的时候
inject 用于何时将数组转换为单个值
| 归档时间: |
|
| 查看次数: |
52012 次 |
| 最近记录: |