Quel est le moyen le plus simple de convertir
[x1, x2, x3, ... , xN]
à
[[x1, 2], [x2, 3], [x3, 4], ... , [xN, N+1]]
Quel est le moyen le plus simple de convertir
[x1, x2, x3, ... , xN]
à
[[x1, 2], [x2, 3], [x3, 4], ... , [xN, N+1]]
Si vous utilisez ruby 1.8.7 ou 1.9, vous pouvez utiliser le fait que les méthodes d'itérateurs comme each_with_index
lorsqu'ils sont appelés sans bloc, renvoient un Enumerator
que vous pouvez appeler Enumerable
des méthodes comme map
sur. Donc tu peux le faire :
arr.each_with_index.map { |x,i| [x, i+2] }
Dans la version 1.8.6, vous pouvez le faire :
require 'enumerator'
arr.enum_for(:each_with_index).map { |x,i| [x, i+2] }
Merci ! Pourriez-vous me donner un pointeur vers la documentation pour .each_with_index.map
?
@Misha : map
est une méthode de Enumerable
comme toujours. each_with_index
lorsqu'il est appelé sans bloc, renvoie un Enumerator
(dans la version 1.8.7+), qui intègre l'objet Enumerable
Vous pouvez donc appeler map
, select
, reject
etc., tout comme sur un tableau, un hachage, une plage, etc.
Ruby a Enumerator#with_index(offset = 0) Il faut donc d'abord convertir le tableau en un énumérateur en utilisant la méthode suivante Objet#to_enum o Tableau#map :
[:a, :b, :c].map.with_index(2).to_a
#=> [[:a, 2], [:b, 3], [:c, 4]]
Voici deux autres options pour 1.8.6 (ou 1.9) sans utiliser l'énumérateur :
# Fun with functional
arr = ('a'..'g').to_a
arr.zip( (2..(arr.length+2)).to_a )
#=> [["a", 2], ["b", 3], ["c", 4], ["d", 5], ["e", 6], ["f", 7], ["g", 8]]
# The simplest
n = 1
arr.map{ |c| [c, n+=1 ] }
#=> [["a", 2], ["b", 3], ["c", 4], ["d", 5], ["e", 6], ["f", 7], ["g", 8]]
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.