2013-01-25 109 views
3

簡單的問題,我有如何獲得所有項目從文本從有序集合

|list string| 
list:= #('ab' 'efghij' 'lmnopqrst'). "Ordered collection" 
list do:[:each| "string with:each" i know this is not right how do i add items ]. 

我試圖流過它返回我這個「有序集合('AB'efghij‘lmnopqrst’)」

我需要的是一個單一的文本具有

'abc efghij lmnopqrst ' 

回答

6

在菲羅你可以做

Character space join: list 

如果加盟:不可用,它應該每形成阱那麼你可以使用一個流變體

String streamContents: [:stream| 
    list 
     do [:each| stream nextPutAll: each ] 
     separatedBy: [ stream nextPut: Character space ] 
3

Object類定義了#asString信息如下:

"Answer a string that represents the receiver." 

所以,你可以這樣做:

| aList aStringsList | 
aList := #('ab' 'efghij' 'lmnopqrst'). "Array" 
aStringsList := aList collect: [ :each | each asString ] 

而且aStringsList將通過#asString每個aList的成員調用返回的String S的Array

如果你想連接所有的人都在一個單一的String,您可以使用收藏的#inject:into:方法,而不是#collect:

aList inject: '' into: [ :text :each | text , each asString , ' ' ] 

如果您打印,你會得到'ab efghij lmnopqrst '你想要的: )

+0

尼斯的解釋,但使用的是[倒楣畫家算法(http://en.wikipedia.org/wiki/Schlemiel_the_Painter's_algorithm),這是非常低效的如果列表增長。而是選擇了使用#join:或#streamContents:的Norbert解決方案。 – camillobruni

相關問題