Comment la carte avec index en Ruby?
Quelle est la manière la plus facile de convertir
[x1, x2, x3, ... , xN]
à
[[x1, 2], [x2, 3], [x3, 4], ... , [xN, N+1]]
Vous devez vous connecter pour publier un commentaire.
Quelle est la manière la plus facile de convertir
[x1, x2, x3, ... , xN]
à
[[x1, 2], [x2, 3], [x3, 4], ... , [xN, N+1]]
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à l'aide de ruby 1.8.7 ou 1.9, vous pouvez utiliser le fait que l'itérateur méthodes comme
each_with_index
, lorsqu'il est appelé sans un bloc, de retour d'unEnumerator
objet, que vous pouvez appelerEnumerable
méthodes commemap
sur. De sorte que vous pouvez faire:Dans 1.8.6 que vous pouvez faire:
.each_with_index.map
?map
est une fonction de quoi ?Enumerable
comme toujours.each_with_index
, lorsqu'il est appelé sans un bloc, renvoie unEnumerator
objet (1.8.7+), qui se mélange dansEnumerable
, de sorte que vous pouvez appelermap
,select
,reject
etc. sur elle comme sur un tableau de hachage, plage etc.arr.map.with_index{ |o,i| [o,i+2] }
map
retourne un tableau lorsqu'il est appelé sans un bloc 1.8).Ruby a Énumérateur#with_index(offset = 0), donc tout d'abord convertir le tableau à l'aide d'un agent recenseur Objet#to_enum ou Tableau#map:
foo = ['d'] * 5; foo.map!.with_index { |x,i| x * i }; foo #=> ["", "d", "dd", "ddd", "dddd"]
En ruby 1.9.3 il y a un chaînage de méthode appelée
with_index
qui peuvent être enchaînés à la carte.Par exemple:
Sur le dessus de la dissimulation de l':
Voici deux autres options pour 1.8.6 (ou 1,9) sans utiliser d'agent recenseur:
J'ai toujours aimé la syntaxe de ce style:
Invoquant
each_with_index
vous obtient un agent recenseur vous pouvez facilement faire correspondre avec votre index disponibles.map.with_index
existe déjà en ruby. Pourquoi suggérer à rouvrir l'énumération de la classe et d'ajouter quelque chose qui existe déjà?each_with_index.map
etc. et même ceux d'entre nous sur les versions plus récentes peuvent préférer à avoir à utiliser la carte.with_index FWIW 🙂Un plaisir, mais inutile de moyen de le faire:
A fun, but useless way
.+2
est de créer de la sortie de l'OP demandeJe fais souvent ce:
Au lieu de directement de l'itération sur les éléments de la matrice, vous êtes une itération sur une plage de nombres entiers et de les utiliser comme indices de récupérer les éléments de la matrice.