web-dev-qa-db-fra.com

Quelle est la différence entre map, each et collect?

Dans Ruby, existe-t-il une différence entre les fonctionnalités de each, map et collect?

60
Rahul

each est différent de map et collect, mais map et collect sont les mêmes (techniquement map est un alias pour collect, mais d'après mon expérience, map est beaucoup plus utilisé).

each exécute le bloc inclus pour chaque élément du récepteur (Enumerable):

[1,2,3,4].each {|n| puts n*2}
# Outputs:
# 2
# 4
# 6
# 8

map et collect produisent un nouveau Array contenant les résultats du bloc appliqué à chaque élément du récepteur:

[1,2,3,4].map {|n| n*2}
# => [2,4,6,8]

Il y a aussi map!/collect! défini sur Arrays; ils modifient le récepteur en place:

a = [1,2,3,4]
a.map {|n| n*2} # => [2,4,6,8]
puts a.inspect  # prints: "[1,2,3,4]"
a.map! {|n| n+1}
puts a.inspect  # prints: "[2,3,4,5]"
116
Chowlett

Each évaluera le bloc mais jette le résultat de l'évaluation du bloc Each et retourne le tableau d'origine.

irb(main):> [1,2,3].each {|x| x*2}
=> [1, 2, 3]

Map/collect renvoie un tableau construit à la suite de l'appel du bloc pour chaque élément du tableau.

irb(main):> [1,2,3].collect {|x| x*2}
=> [2, 4, 6]
23
RubyMiner