Smalltalk 如何从有序集合的文本中获取所有项

Smalltalk 如何从有序集合的文本中获取所有项,smalltalk,pharo,Smalltalk,Pharo,我有一个简单的问题 |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 ]. 我也尝试了streams,但它返回给我这个“有序集合('ab''efghij''lmnopqrst')” 我所需要的只是一篇有 'abc efghij lmnopqrs

我有一个简单的问题

|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 ].
我也尝试了streams,但它返回给我这个“有序集合('ab''efghij''lmnopqrst')”

我所需要的只是一篇有

'abc efghij lmnopqrst '

Object
类定义了一条
#asString
消息,内容如下:

"Answer a string that represents the receiver."
因此,您可以:

| aList aStringsList |
aList := #('ab' 'efghij' 'lmnopqrst'). "Array"
aStringsList := aList collect: [ :each | each asString ]
astringlist
将是调用
#asString
在每个
aList
成员中返回的
字符串的
数组

如果要将它们连接在一个
字符串中
,可以使用集合的
\inject:into:
方法,而不是
\collect:

aList inject: '' into: [ :text :each | text , each asString , ' ' ]
如果你打印出来,你会得到你想要的
'ab efghij lmnopqrst'在Pharo你可以这样做

Character space join: list
如果join:不可用,并且应该表现良好,那么您可以使用流变量

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

很好的解释,但是如果列表增加,您使用的是非常低效的。而是使用#join:或#streamContents:从Norbert选择解决方案。