J'ai ce code qui imprime chaque caractère d'une chaîne deux fois:

r = "12345"
r.split("").each do |ch|
  puts "#{ch}#{ch}"
end

J'obtiens cette sortie:

11
22
33
44
55

Je veux stocker la sortie "1122334455" dans une variable. Comment réécrire le code pour ce faire?

1
user7055375 16 nov. 2017 à 04:39

4 réponses

Meilleure réponse

Une façon de procéder:

r.gsub(/(.)/,'\1\1') #=> "1122334455"
3
Sagar Pandya 16 nov. 2017 à 01:59

Les réponses de Sagar et Sebastian sont le moyen le plus simple de le faire, mais si vous voulez vous en tenir à votre code d'origine (itérer sur les caractères), alors voici une autre façon:

variable = r.each_char.with_object(""){|c, s| s << c * 2}
# => "1122334455"
2
sawa 16 nov. 2017 à 05:44

Vous pouvez utiliser des caractères pour obtenir chaque caractère de la chaîne en tant que valeur dans un tableau "principal", puis utiliser le format de carte pour les éléments à l'intérieur, puis les joindre tous pour créer une chaîne finale, comme:

r = '12345'
capture = r.chars.map { |ch| ch * 2 }.join
p capture
# "1122334455"
3
Sebastian Palma 16 nov. 2017 à 02:31

Vous pouvez utiliser Array#sum dans Ruby> 2.4

'12345'.chars.sum('') { |n| n * 2  }                                           
 #=> "1122334455"
0
Sagar Pandya 12 avril 2018 à 02:28
47320177