2013-05-09 4 views
0

Je veux lire quelques lignes dans une boucle et les concaténer:Comment concaténer une chaîne dans une boucle while?

d = "" 
while s = gets do 
    d = d.concat(s) 
end 
puts d 

Après je résilie la boucle avec CNTRL + Z (sous Windows), la sortie est juste la dernière chaîne que j'ai lu dans ma boucle. Je l'ai essayé aussi avec + et << mais avec le même résultat.

+1

Vous n'avez besoin que de 'd.concat (s)'. C'est une méthode destructive. –

Répondre

5

Vous pouvez le faire en deux façons cette façon:

d = "" 
while s = gets do 
    d << s 
end 
puts d 

Edit: Marc-André Lafortune remarqué est utilise += pas très bonne idée, donc je ne laisser que << méthode ici.

+0

oh merde merci, j'ai fait une énorme erreur :) – SirCheckmatesalot

+0

+1 Ce sont beaucoup plus idiomatiques que d'utiliser 'concat'. –

+0

Si vous pouvez modifier la chaîne sur place, '<<' semble fonctionner beaucoup mieux car elle ne crée pas de nouvelle chaîne à chaque fois. Utiliser '+ =' devrait être réservé aux cas où la chaîne initiale doit être préservée. – tadman

1

Deux bonnes manières sont soit utiliser << ou join:

d = "" 
while s = gets do 
    d << s 
end 
puts d 

Ou

a = [] 
while s = gets do 
    a << s 
end 
puts a.join 

Qu'est-ce que vous ne voulez pas faire est d'utiliser += dans le premier exemple. Imaginez que votre boucle répète 200 fois et renvoie une longueur de 100 caractères s. Vous allez construire 200 cordes, de longueurs 100, 200, 300, ..., 199900, 200000. Ce sera O(n^2).

Questions connexes