collect/ map是等价的.它们的区别each在于each只对每个元素执行块,而collect/ map返回一个数组,其中包含为每个元素调用块的结果.另一种可能的方式是,each期望对每个元素做一些事情,而map期望转换每个元素(将其映射到其他元素).
您可以使用collect或map在任何地方each使用,您的代码仍然可以使用.但它的效率可能略低,因为它会在数组中收集结果,除非您的Ruby实现意识到它不必费心创建数组,因为它从未使用过.
另一个原因是使用each替代map或者collect是帮忙的人阅读你的代码.如果我看到each那么我就可以了,我们即将使用数据的每个元素来做某事.如果我看到map那么我期望看到基于旧数据的重新映射而创建新数据.
关于mapvs. collect我会说这是一个偏好的问题,但你应该选择一个并坚持它以保持一致性.