277 votes

Quelle est la "carte" la méthode le faire en Ruby?

Je suis nouveau en programmation. Quelqu'un peut m'expliquer ce qu' .map ferait:

params = (0...param_count).map

458voto

Speransky Danil Points 11150

L' map méthode prend un objet énumérable et d'un bloc, et exécute le bloc pour chaque élément, en sortie de chaque valeur retournée par le bloc (de l'objet d'origine est inchangé, sauf si vous utilisez map!):

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

Array et Range sont énumérables types. map avec un bloc retourne un Tableau. map! mute le tableau d'origine.

Où est-ce utile, et quelle est la différence entre map! et each? Voici un exemple:

names = ['danil', 'edmund']

# here we map one array to another, convert each element by some rule
names.map! {|name| name.capitalize } # now names contains ['Danil', 'Edmund']

names.each { |name| puts name + ' is a programmer' } # here we just do something with each element

La sortie:

Danil is a programmer
Edmund is a programmer

71voto

boulder_ruby Points 6257

map, avec select et each est l'un des Rubis de chevaux de trait dans mon code.

Il vous permet d'exécuter une opération sur chacun de vos tableau d'objets et de les renvoyer tous dans le même endroit. Un exemple serait d'incrémenter un tableau de nombres par un:

[1,2,3].map {|x| x + 1 }
#=> [2,3,4]

Si vous pouvez exécuter une méthode unique sur votre éléments du tableau, vous pouvez le faire dans un texte-style comme suit:

  1. Pour ce faire, avec l'exemple ci-dessus que vous avez à faire quelque chose comme ceci

    class Numeric
      def plusone
        self + 1
      end
    end
    [1,2,3].map(&:plusone)
    #=> [2,3,4]
    
  2. Plus simplement utiliser l'esperluette raccourci technique, prenons un autre exemple:

    ["vanessa", "david", "thomas"].map(&:capitalize)
    #=> ["VANESSA", "DAVID", "THOMAS"]
    

Transformer les données en Ruby s'agit souvent d'une cascade d' map des opérations. Étude map & select, ils sont quelques-uns des plus utiles méthodes Ruby dans la bibliothèque du primaire. Ils sont tout aussi important que l' each.

(map est aussi un alias pour collect. Utilisez ce qui fonctionne le mieux pour vous sur le plan conceptuel.)

4voto

Pedro Nascimento Points 3781

0..param_count signifie "jusqu'à et y compris param_count". 0...param_count signifie "jusqu'à, mais pas y compris param_count".

Range#map ne renvoie pas d' Enumerable, il fait les cartes à un tableau. C'est le même que Range#to_a.

3voto

minitech Points 87225

Il "cartes" d'une fonction à chaque élément de l' Enumerable - dans ce cas, une gamme. Alors il appelle le bloc passé une seule fois pour chaque nombre entier de 0 à param_count (exclusif - vous avez raison sur les points) et retourne un tableau contenant chaque valeur de retour.

Voici la documentation pour Enumerable#map. Il dispose également d'un alias, collect.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X