【问题标题】:Distinct difference between collect and each? [duplicate]收集和每个之间的明显区别? [复制]
【发布时间】:2011-04-07 12:53:45
【问题描述】:

使用数组 collect 和 each 之间的主要区别是什么?偏爱?

some = []

some.collect do {|x| puts x}

some.each do |x|
    puts x
end

【问题讨论】:

  • 这是 Ruby,而不是 RoR,具体...您可以编辑标题。
  • 重新标记以删除 rails 标记,因为这是一个红宝石问题

标签: ruby collections each


【解决方案1】:

collect(或map)会将do块的返回值“保存”在一个新数组中并返回,例如:

some = [1,2,3,10]
some_plus_one = some.collect {|x| x + 1}
# some_plus_one == [2,3,4,11]

each 只会对每一项执行do块,不会保存返回值。

【讨论】:

  • 非常感谢您的回复。所以基本上使用收集,同时通过块它还将值保存到一个新数组中。所以 .collect 有点像 each 但是返回一个包含每个块的返回值的数组?那么collect和map是一回事吗?地图是否已弃用?有什么偏好吗?
  • mapcollect 是同一个东西(相同的方法),只是命名约定不同。
【解决方案2】:

array = []是定义数组对象的快捷方式(长格式:array = Array.new

Array#collect(和Array#map)根据块中传递的代码返回一个新数组。 Array#each 对数组的每个元素执行一个操作(由块定义)。

我会像这样使用收集:

array = [1, 2, 3]
array2 = array.collect {|val| val + 1}

array.inspect # => "[1, 2, 3]"
array2.inspect # => "[2, 3, 4]"

每个都像这样:

array = [1, 2, 3]
array.each {|val| puts val + 1 }
# >> 2
# >> 3
# >> 4
array.inspect # => "[1, 2, 3]"

希望这会有所帮助...

【讨论】:

  • +1 以获得清晰简洁的解释
  • 非常感谢您提供的示例。
  • 我也感谢你这么好的解释。我在 codecademy 的用户论坛上问了同样的问题,并从几个自以为是的混蛋那里得到了两个居高临下的回答。好像这是世界上最愚蠢的问题,我应该为问这个问题感到羞耻。
猜你喜欢
  • 2016-04-20
  • 2012-03-24
  • 2014-11-01
  • 2013-07-01
  • 1970-01-01
  • 2011-07-12
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多