La différence entre la carte et collecter des Rubis?
J'ai Googlé ce et a obtenu inégale /opinions contradictoires - est-il réellement une différence entre faire un map
et de faire un collect
sur un tableau en Ruby/Rails?
La docs ne semble pas proposer de tout, mais il y a peut-être des différences dans la méthode ou la performance?
map
est préféré à Code de Golf.- Comme une explication de la
map
est préféré à CodeGolf, qui pourrait ne pas être évident pour tous: c'est seulement parce quecollect
est de quatre caractères de plus quemap
, mais la même fonction. - Juste pour jouer l'avocat du diable, je trouve personnellement
collect
plus lisible et le naturel, l'idée de la collecte des dossiers et à faire X pour leur rend plus naturel de sens pour moi que de "cartographie" des dossiers et à faire X pour eux.
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de différence, en fait
map
est implémenté en C commerb_ary_collect
etenum_collect
(eg. il y a une différence entremap
sur un tableau et sur toute autre enum, mais pas de différence entremap
etcollect
).Pourquoi faire les deux
map
etcollect
existent en Ruby? Lemap
fonction a beaucoup de conventions de noms dans différentes langues. Wikipedia fournit une vue d'ensemble:Ruby fournit un alias pour les programmeurs de la Causerie monde pour se sentir plus à l'aise.
Pourquoi est-il une mise en œuvre différente pour les tableaux et les énumérations? Un enum est généralisée itération de la structure, ce qui signifie qu'il n'y a aucune façon de Ruby peut prédire ce que l'élément suivant peut être (vous pouvez définir l'infini des enums, voir Le premier pour un exemple). Par conséquent, il doit appeler une fonction à chaque élément successif (ce sera typiquement le
each
méthode).Tableaux les plus courantes sont la collection, donc il est raisonnable d'optimiser leurs performances. Depuis Ruby sait beaucoup de choses sur la façon dont les matrices de travail, il n'a pas à appeler
each
mais ne peut utiliser de simples manipulation du pointeur qui est nettement plus rapide.Similaire optimisations existent pour un certain nombre de méthodes de Tableau comme
zip
oucount
.count
,length
, ousize
. Des mots différents pour le même attribut d'un tableau, mais par la présente, Ruby vous permet de choisir le mot le plus approprié pour votre code: voulez-vous le nombre des articles que vous êtes la collecte, le longueur d'un tableau, ou le courant taille de la structure. Essentiellement, ils sont tous les mêmes, mais choisir le bon mot peut rendre votre code plus facile à lire, ce qui est une belle propriété de la langue.j'ai ditils sont les mêmes.En fait, ils sont documentés dans le même endroit sous ruby-doc.org:
http://www.ruby-doc.org/core/classes/Array.html#M000249
J'ai fait un test de référence pour essayer de répondre à cette question, puis trouvé ce post alors voici mes résultats (qui diffèrent légèrement des autres réponses)
Ici est l'indice de référence code:
Et les résultats que j'ai obtenus étaient les suivants:
Peut-être un alias n'est pas libre?
Ruby alias la méthode Array#carte de Tableau#recueillir; ils peuvent être utilisés de façon interchangeable. (Ruby Moine)
En d'autres termes, même le code source :
http://ruby-doc.org/core-2.2.0/Array.html#method-i-map
La
collect
etcollect!
méthodes sont des alias pourmap
etmap!
, de sorte qu'ils peuvent être utilisés de façon interchangeable. Voici un moyen facile de confirmer que: