2013-01-25 62 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

相关问题