参见英文答案 what’s different between each and collect method in Ruby 7个 似乎有很多方法可以在Ruby中循环使用Enumerable.每个,foreach或收集,地图或其他类似方法之间是否有任何差异? 或者有什么理
似乎有很多方法可以在Ruby中循环使用Enumerable.每个,foreach或收集,地图或其他类似方法之间是否有任何差异?
或者有什么理由我不应该在某些情况下使用某些方法?
收集/地图是等价的.它们各自的不同之处在于每个元素只执行每个元素的块,而collect / map返回一个数组,其中包含为每个元素调用块的结果.另一种方法可能是,每个都应该对每个元素做一些事情,而map应该转换每个元素(将它映射到其他元素).你可以在任何地方使用收集或地图,你的代码仍然有效.但它的效率可能略低,因为它会在数组中收集结果,除非您的Ruby实现意识到它不必费心创建数组,因为它从未使用过.
使用每个而不是地图或收集的另一个原因是帮助任何人阅读您的代码.如果我看到每一个,那么我就可以了,我们即将使用数据的每个元素来做某事.如果我看到地图,那么我期望看到基于旧数据的重新映射而创建新数据.
关于地图与收集,我会说这是一个偏好问题,但你应该选择一个并坚持它以保持一致性.