2013-05-09 21 views
0

我想讀一個循環的一些線路和將它們連接起來:如何連接while循環中的字符串?

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

後,我取消與循環CNTRL + ž(在Windows上),輸出僅僅是我讀的最後一個字符串在我的循環中。我也嘗試過+<<,但結果相同。

+1

您只需要'd.concat(s)'。這是一種破壞性的方法。 – 2013-05-09 17:10:41

回答

5

你可以做到這一點在兩種方式這樣:

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

編輯:使用+=不太好主意馬克 - 安德烈·Lafortune注意到了,所以我在這裏只留下<<方法。

+0

哦該死的謝謝,我犯了一個巨大的錯誤:) – SirCheckmatesalot 2013-05-09 17:06:03

+0

+1這些比使用'concat'更加習慣。 – 2013-05-09 17:35:34

+0

如果你可以在原地修改字符串,那麼'<<'看起來好多了,因爲它不會每次都創建一個新的字符串。當需要保存初始字符串時,應該使用'+ ='保留。 – tadman 2013-05-09 17:47:18

1

兩個好方法是要麼使用<<join

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

或者

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

什麼你不想做是在第一個例子中使用+=。設想你的循環迭代200次,並返回一個100個字符的s。您將構建200個長度爲100,200,300,...,199900,200000的字符串。這將是O(n^2)