Comment utiliser la méthode Ruby Map (avec des exemples)

25 août 2025

Ruby est un langage de programmation dynamique et orienté objet, connu pour sa simplicité et son élégance. L'une de ses méthodes les plus puissantes et les plus utilisées est carte, Ruby est un outil polyvalent permettant de transformer les données contenues dans les tableaux et autres collections énumérables. Que vous soyez un débutant apprenant Ruby ou un développeur expérimenté cherchant à affiner ses compétences, la maîtrise de l'utilisation de Ruby est essentielle. carte est essentielle pour écrire un code concis et efficace.

Dans ce guide complet, nous explorerons les éléments suivants Méthode Ruby Map en profondeur, en couvrant sa syntaxe, ses cas d'utilisation et ses meilleures pratiques. Nous fournirons des exemples clairs pour illustrer comment carte et comment il peut simplifier votre code. À la fin du cours, vous aurez une solide compréhension des éléments suivants carte et vous serez prêt à l'utiliser dans vos propres projets Ruby.

Qu'est-ce que la méthode Ruby Map ?

La méthode map est une méthode intégrée à Ruby, disponible pour les objets qui incluent l'élément Enumérable tels que les tableaux, les hachages et les plages. Elle est utilisée pour itérer sur une collection et créer un nouveau tableau en appliquant une transformation (définie dans un bloc) à chaque élément. Contrairement à d'autres méthodes d'itération comme chacun, qui se contente d'itérer sans renvoyer de nouvelle collection, map renvoie toujours un nouveau tableau contenant les éléments transformés.

Le carte est également appelée collecter en Ruby, ce qui signifie que vous pouvez utiliser soit carte ou collecter de manière interchangeable. Pour les cohérence, nous utiliserons carte tout au long de cet article.

Caractéristiques principales de la carte
  • Non-destructif : carte ne modifie pas la collection d'origine ; elle renvoie un nouveau tableau contenant les éléments transformés.
  • Axé sur la transformation : Chaque élément de la collection est traité par le bloc, et le résultat du bloc devient un élément du nouveau tableau.
  • Cartographie individuelle : Le tableau de sortie a le même nombre d'éléments que la collection d'entrée, chaque élément étant transformé selon la logique du bloc.
Syntaxe

La syntaxe de base pour carte est :

ruby
array.map { |element| transformation }

ou, à l'aide de la fonction faire...fin syntaxe de bloc pour les blocs de plusieurs lignes :

ruby
array.map do |element|
    transformation #
fin

Ici :

  • réseau est la collection sur laquelle vous itérez.
  • |Élément| représente chaque élément de la collection comme carte itère.
  • la transformation est la logique que vous appliquez à chaque élément.
  • Le résultat est un nouveau tableau contenant les éléments transformés.

Vous pouvez également passer une méthode ou un processus à carte sans bloc, mais nous nous concentrerons d'abord sur l'utilisation par bloc.

Pourquoi utiliser la méthode Ruby Map ?

Le carte est la pierre angulaire de la programmation fonctionnelle en Ruby. Elle vous permet de :

  • Transformez les données de manière concise sans modifier la collection d'origine.
  • Écrire un code plus propre et plus lisible que l'itération manuelle avec des boucles.
  • Enchaîner avec d'autres méthodes énumérables pour créer de puissants pipelines de traitement de données.

Prenons des exemples pratiques pour voir ce qui suit carte en action.

Exemples de base de la méthode Ruby Map

Exemple 1 : Transformation des nombres

Supposons que vous disposiez d'un tableau de nombres et que vous souhaitiez doubler chacun d'entre eux. Voici comment vous pouvez utiliser carte:

rubis
nombres = [1, 2, 3, 4, 5]
doublé = nombres.map { |n| n * 2 }
puts doubled # Sortie : [2, 4, 6, 8, 10]

Dans cet exemple :

  • Le chiffres est itéré sur le tableau.
  • Chaque élément n est multiplié par 2 dans le bloc.
  • carte renvoie un nouveau tableau [2, 4, 6, 8, 10].
  • L'original chiffres reste inchangé : [1, 2, 3, 4, 5].
Exemple 2 : Manipulation de chaînes de caractères

Vous pouvez utiliser carte pour transformer les chaînes de caractères. Par exemple, mettons une majuscule à chaque chaîne d'un tableau :

rubis
fruits = ["pomme", "banane", "orange"]
capitalisé = fruits.map { |fruit| fruit.capitaliser }
puts capitalized # Sortie : ["Pomme", "Banane", "Orange"]

Ici, carte applique le capitaliser à chaque chaîne, renvoyant un nouveau tableau avec les valeurs transformées.

Exemple 3 : Conversion des types de données

carte est très utile pour convertir des éléments d'un type à un autre. Par exemple, convertir un tableau de chaînes de caractères en nombres entiers :

ruby
nombres_chaînes = ["1", "2", "3"]
integers = string_numbers.map { |str| str.to_i }
puts integers # Sortie : [1, 2, 3]

Le to_i convertit chaque chaîne de caractères en un nombre entier, et la méthode carte rassemble les résultats dans un nouveau tableau.

Utiliser Ruby Map avec des symboles et des procs

Pour les transformations simples, vous pouvez utiliser la syntaxe abrégée de Ruby en passant le nom d'une méthode sous forme de symbole ou de proc à carte. Cette méthode est plus concise que l'utilisation d'un bloc.

Exemple 4 : Utilisation d'un symbole

Si vous souhaitez appeler une méthode sur chaque élément, vous pouvez transmettre le nom de la méthode sous la forme d'un symbole :

rubis
fruits = ["pomme", "banane", "orange"]
capitalisé = fruits.map(&:capitaliser)
puts capitalized # Sortie : ["Pomme", "Banane", "Orange"]

Ici, &:capitaliser est l'abréviation de { |fruit| fruit.majuscule }. Cette syntaxe fonctionne lorsque la transformation implique l'appel d'une seule méthode sans arguments supplémentaires.

Exemple 5 : Utilisation d'un Proc

Vous pouvez également utiliser un Proc pour des transformations plus complexes :

ruby
double = Proc.new { |n| n * 2 }
nombres = [1, 2, 3, 4]
doublé = nombres.map(&double)
puts doubled # Sortie : [2, 4, 6, 8]

Cette approche est utile lorsque vous souhaitez réutiliser la logique de transformation dans plusieurs carte appels.

Ruby Map avec plusieurs arguments

Lorsque l'on travaille avec des tableaux de tableaux ou des hachages, carte peut gérer plusieurs paramètres de bloc.

Exemple 6 : Tableaux de tableaux

Supposons que vous disposiez d'un tableau de paires de coordonnées et que vous souhaitiez calculer leurs sommes :

rubis
coordonnées = [[1, 2], [3, 4], [5, 6]]
sums = coordinates.map { |x, y| x + y }
puts sums # Sortie : [3, 7, 11]

Ici, carte décompose chaque sous-réseau en x et y, et le bloc renvoie leur somme.

Exemple 7 : Hachures

Vous pouvez utiliser carte avec des hachages pour transformer les paires clé-valeur :

rubis
prix = { pomme : 1, banane : 2, orange : 3 }
formatted = prices.map { |fruit, price| "#{fruit} : $#{prix}" }
puts formatted # Sortie : ["pomme : $1", "banane : $2", "orange : $3"]

Il convient de noter que lorsque carte est appelé sur un hachage, il produit des paires clé-valeur sous forme de tableaux, que vous pouvez déstructurer dans le bloc.

Cas d'utilisation avancés

Exemple 8 : enchaînement d'une carte avec d'autres méthodes

carte est souvent utilisée en combinaison avec d'autres méthodes énumérables telles que sélectionner, rejeter, ou réduire. Par exemple, filtrons les nombres pairs et doublons-les :

rubis
nombres = [1, 2, 3, 4, 5, 6]
doubled_evens = numbers.select { |n| n.even ? }.map { |n| n * 2 }
puts doubled_evens # Sortie : [4, 8, 12]

Ici, sélectionner filtre les nombres pairs, et carte les double, créant ainsi un pipeline de transformation de données concis.

Exemple 9 : Cartes imbriquées

Vous pouvez utiliser carte à l'intérieur carte pour traiter les collections imbriquées. Par exemple, pour doubler chaque nombre dans un tableau imbriqué :

rubis
nested = [[1, 2], [3, 4], [5, 6]]
doubled_nested = nested.map { |subarray| subarray.map { |n| n * 2 } }
puts doubled_nested # Sortie : [[2, 4], [6, 8], [10, 12]]

Chaque sous-réseau est traité par un carte, qui en double les éléments.

Exemple 10 : Traitement des valeurs nulles

Lorsque des transformations peuvent produire néant, Vous pouvez combiner la carte avec compact pour supprimer néant valeurs :

rubis
words = ["chat", "chien", "", "oiseau"]
lengths = words.map { |word| word.length unless word.empty ? }.compact
puts lengths # Sortie : [3, 3, 4]

Ici, carte retours [3, 3, nil, 4], et compact supprime le néant valeur.

Map vs. autres méthodes énumérables

Comprendre quand utiliser carte, il est utile de la comparer avec d'autres méthodes énumérables de Ruby :

  • chacun: Itère sur une collection mais ne renvoie pas de nouveau tableau. Utiliser chacun pour les effets secondaires (par exemple, l'impression ou la modification de l'état externe).
  • sélectionner: Renvoie un nouveau tableau contenant les éléments qui satisfont à une condition. Utiliser sélectionner pour le filtrage.
  • carte vs. collecter: Ils sont identiques ; utilisez celui qui se lit le mieux dans votre code.
  • carte vs. chaque_objet: chaque_objet est préférable lorsque vous devez construire un objet personnalisé (par exemple, un hachage) pendant l'itération.

Par exemple:

rubis
# Utilisation de chaque (pas de valeur de retour)
nombres = [1, 2, 3]
nombres.each { |n| met n * 2 } # Imprime 2, 4, 6, renvoie [1, 2, 3]

# Utilisation de map (retourne un tableau transformé)
doublé = nombres.map { |n| n * 2 } # Retourne [2, 4, 6]

Meilleures pratiques pour l'utilisation de Ruby Map

  • Gardez les blocs simples : Veillez à ce que la logique de transformation du bloc soit claire et concise. Une logique complexe peut être mieux extraite dans une méthode ou une procédure séparée.
  • Utiliser une syntaxe abrégée lorsque c'est possible : Pour les transformations simples, utilisez map(&:méthode) pour améliorer la lisibilité.
  • Éviter les effets secondaires : Depuis carte est conçu pour créer un nouveau tableau, évitez de l'utiliser pour des effets secondaires (par exemple, l'impression). Utiliser chacun à cette fin.
  • Vérifier les valeurs nulles : Si votre transformation peut produire néant, Envisagez d'utiliser compact ou la manipulation néant explicitement dans le bloc.
  • Chaîner judicieusement : Combiner carte avec d'autres méthodes énumérables pour créer un code propre et fonctionnel, mais évitez les chaînes trop longues qui réduisent la lisibilité.
  • Testez vos transformations : Depuis carte crée un nouveau tableau, vérifiez que le résultat correspond à vos attentes, en particulier lorsque vous travaillez avec des données complexes.

Les pièges les plus fréquents

Écueil 1 : Mutation du tableau original

carte lui-même est non destructif, mais le bloc peut muter des objets s'ils sont mutables. Par exemple, le bloc peut muter des objets s'ils sont mutables :

ruby
strings = ["hello", "world"]
strings.map { |s| s.upcase ! }
puts strings # Sortie : ["HELLO", "WORLD"]

Ici, la caisse montante ! modifie les chaînes de caractères originales. Pour éviter cela, utilisez des méthodes non destructives telles que cas de remontée:

ruby
strings = ["hello", "world"]
uppercased = strings.map { |s| s.upcase }
puts strings # Sortie : ["hello", "world"]
puts uppercased # Résultat : ["HELLO", "WORLD"]
Écueil 2 : Oublier que Map renvoie un tableau

Lors de l'utilisation de carte sur un hachage, le résultat est un tableau, pas un hachage. Pour transformer un hachage et le conserver en tant que hachage, utilisez transform_values (disponible dans Ruby 2.4+) :

rubis
prices = { apple : 1, banana : 2 }
doubled = prices.transform_values { |price| price * 2 }
puts doubled # Sortie : { apple : 2, banana : 4 }
Écueil 3 : Compliquer à l'excès les blocs

Éviter une logique trop complexe dans les carte blocs. Par exemple, au lieu de :

rubis
nombres = [1, 2, 3]
résultats = nombres.map do |n|
    si n.pair ?
        n * 2
    else
        n + 1
    end
fin

Envisagez de diviser la logique en méthodes distinctes ou d'utiliser plusieurs méthodes énumérables :

rubis
nombres = [1, 2, 3]
résultats = nombres.map { |n| n.even ? ? n * 2 : n + 1 }

Applications dans le monde réel

Le carte brille dans des scénarios réels tels que :

  • Transformation des données : Conversion des enregistrements de la base de données dans un format adapté à une réponse de l'API.
  • Traitement de texte : Normaliser ou formater des chaînes de caractères en masse.
  • L'analyse des données: Appliquer des calculs à des ensembles de données (par exemple, mettre des valeurs à l'échelle ou convertir des unités).
  • Développement web: Transformer les données d'un modèle dans des formats conviviaux en Ruby on Rails.

Par exemple, dans une application Rails, vous pouvez utiliser carte pour formater les données de l'utilisateur :

ruby
users = User.all
user_data = users.map { |user| { id : user.id, name : user.name.upcase } }

Cela crée un tableau de hachages adapté à une réponse JSON de l'API.

Conclusion

Le Rubis carte est l'un des outils les plus polyvalents pour transformer des collections de manière fonctionnelle, concise et très lisible. En maîtrisant sa syntaxe, ses cas d'utilisation et ses meilleures pratiques, les développeurs peuvent simplifier le code tout en gérant un large éventail de tâches de transformation de données. Des simples opérations sur les nombres à la gestion de structures imbriquées complexes, carte se distingue comme une méthode de choix dans les Développement Ruby.

À Carmatec, Nous encourageons les développeurs à s'entraîner sur des exemples concrets et à appliquer les meilleures pratiques pour maximiser le potentiel des méthodes énumérables de Ruby. Que vous construisiez des applications des applications Web, ou le traitement de grands ensembles de données, ou encore l'expérimentation du style de programmation fonctionnelle de Ruby, en tirant parti de la technologie carte vous permet d'écrire un code élégant, efficace et facile à maintenir.