Ruby中each、foreach、collect和map有何本质区别?

2026-04-11 17:021阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计776个文字,预计阅读时间需要4分钟。

Ruby中each、foreach、collect和map有何本质区别?

在Ruby中,`each`和`collect`方法都是枚举(Enumerable)模块提供的方法,用于遍历集合中的元素。以下是它们的简要区别:

- `each`方法: - 它会遍历集合中的每个元素,并对每个元素执行给定的块(block)。 - 它不会返回任何值,块中的代码仅用于执行操作。 - 示例:`[1, 2, 3].each { |i| puts i }` 将输出 `1\n2\n3`。

- `collect`方法(或`map`): - 它也会遍历集合中的每个元素,并对每个元素执行给定的块。 - 它会返回一个包含块返回值的新数组。 - 示例:`[1, 2, 3].collect { |i| i * 2 }` 将返回 `[2, 4, 6]`。

主要区别在于:- `each`用于执行操作但不保存结果,而`collect`用于执行操作并收集结果。- `collect`返回一个新数组,而`each`不返回任何值。

Ruby中each、foreach、collect和map有何本质区别?

至于循环使用`Enumerable`的方法,以下是一些常见的选项:- `each`:如上所述,用于遍历。- `map`:类似于`collect`,用于转换数组元素。- `select`:用于选择满足条件的元素。- `reject`:用于排除不满足条件的元素。- `detect`和`find`:用于找到第一个满足条件的元素。- `all?`和`any?`:用于检查所有或任何元素是否满足条件。

这些方法之间通常没有本质的差别,只是用途不同。它们都是基于相同的枚举逻辑,但针对不同的操作目的。

参见英文答案 > what’s different between each and collect method in Ruby 7个
似乎有很多方法可以在Ruby中循环使用Enumerable.每个,foreach或收集,地图或其他类似方法之间是否有任何差异?

或者有什么理由我不应该在某些情况下使用某些方法?

收集/地图是等价的.它们各自的不同之处在于每个元素只执行每个元素的块,而collect / map返回一个数组,其中包含为每个元素调用块的结果.另一种方法可能是,每个都应该对每个元素做一些事情,而map应该转换每个元素(将它映射到其他元素).

你可以在任何地方使用收集或地图,你的代码仍然有效.但它的效率可能略低,因为它会在数组中收集结果,除非您的Ruby实现意识到它不必费心创建数组,因为它从未使用过.

使用每个而不是地图或收集的另一个原因是帮助任何人阅读您的代码.如果我看到每一个,那么我就可以了,我们即将使用数据的每个元素来做某事.如果我看到地图,那么我期望看到基于旧数据的重新映射而创建新数据.

关于地图与收集,我会说这是一个偏好问题,但你应该选择一个并坚持它以保持一致性.

本文共计776个文字,预计阅读时间需要4分钟。

Ruby中each、foreach、collect和map有何本质区别?

在Ruby中,`each`和`collect`方法都是枚举(Enumerable)模块提供的方法,用于遍历集合中的元素。以下是它们的简要区别:

- `each`方法: - 它会遍历集合中的每个元素,并对每个元素执行给定的块(block)。 - 它不会返回任何值,块中的代码仅用于执行操作。 - 示例:`[1, 2, 3].each { |i| puts i }` 将输出 `1\n2\n3`。

- `collect`方法(或`map`): - 它也会遍历集合中的每个元素,并对每个元素执行给定的块。 - 它会返回一个包含块返回值的新数组。 - 示例:`[1, 2, 3].collect { |i| i * 2 }` 将返回 `[2, 4, 6]`。

主要区别在于:- `each`用于执行操作但不保存结果,而`collect`用于执行操作并收集结果。- `collect`返回一个新数组,而`each`不返回任何值。

Ruby中each、foreach、collect和map有何本质区别?

至于循环使用`Enumerable`的方法,以下是一些常见的选项:- `each`:如上所述,用于遍历。- `map`:类似于`collect`,用于转换数组元素。- `select`:用于选择满足条件的元素。- `reject`:用于排除不满足条件的元素。- `detect`和`find`:用于找到第一个满足条件的元素。- `all?`和`any?`:用于检查所有或任何元素是否满足条件。

这些方法之间通常没有本质的差别,只是用途不同。它们都是基于相同的枚举逻辑,但针对不同的操作目的。

参见英文答案 > what’s different between each and collect method in Ruby 7个
似乎有很多方法可以在Ruby中循环使用Enumerable.每个,foreach或收集,地图或其他类似方法之间是否有任何差异?

或者有什么理由我不应该在某些情况下使用某些方法?

收集/地图是等价的.它们各自的不同之处在于每个元素只执行每个元素的块,而collect / map返回一个数组,其中包含为每个元素调用块的结果.另一种方法可能是,每个都应该对每个元素做一些事情,而map应该转换每个元素(将它映射到其他元素).

你可以在任何地方使用收集或地图,你的代码仍然有效.但它的效率可能略低,因为它会在数组中收集结果,除非您的Ruby实现意识到它不必费心创建数组,因为它从未使用过.

使用每个而不是地图或收集的另一个原因是帮助任何人阅读您的代码.如果我看到每一个,那么我就可以了,我们即将使用数据的每个元素来做某事.如果我看到地图,那么我期望看到基于旧数据的重新映射而创建新数据.

关于地图与收集,我会说这是一个偏好问题,但你应该选择一个并坚持它以保持一致性.