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选择解决方案。