Appliquer la méthode à chacun des éléments de matrice/énumérable
C'est mon tableau:
array = [:one,:two,:three]
Je veux appliquer to_s
méthode à tous mes éléments du tableau pour obtenir array = ['one','two','three']
.
Comment puis-je faire cela (la conversion de chaque élément de l'énumération à autre chose)?
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne:
collect
etcollect!
sont des alias pourmap
etmap!
.!
pour?self
au lieu de simplement retourner la valeur modifiée: stackoverflow.com/a/612196/540447Vous pouvez utiliser
map
oucarte!
respectivement, la première sera de retour une nouvelle liste, la deuxième va modifier la liste sur place:Il est intéressant de noter que si vous avez un tableau d'objets que vous souhaitez passer individuellement dans une méthode avec une autre appelant, comme ceci:
Vous pouvez utiliser le
method
méthode combinée avec bloc d'extension de comportement pour simplifier:Si vous n'êtes pas familier, ce qui
method
n'est encapsule la méthode associée avec le symbole transmis dans un Proc et le renvoie. L'esperluette élargit cette Proc dans un bloc, qui est transmis àmap
tout à fait bien. Le retour demap
est un tableau, et nous voulons probablement format un peu plus gentiment, d'où lejoin
.Le problème, c'est que, comme avec
Symbol#to_proc
, vous ne pouvez pas vous passer des arguments à la méthode d'assistance.array.map!(&:to_s)
modifie le tableau d'origine à['one','two','three']
array.map(&:to_s)
retourne un tableau['one','two','three']
.