在Smalltalk OrderedCollection中打印出来时如何在元素之间添加空格?

时间:2015-12-23 09:28:45

标签: smalltalk

我创建了一个OrderedCollection列表,现在我想通过使用Transcript将其打印出来,如下所示:

  range do:[:each|Transcript show: each].

输出是35791113,但我需要3 5 7 9 11 13,所以我需要元素之间的空格。 我也尝试过..

   Transcript show: range.

但是我不想使用OrderedCollection(3 5 7 9 11 13),而是只有列表元素,没有OrderedCollection。 怎么做到这一点?

3 个答案:

答案 0 :(得分:7)

Pharo 中,您可以直接执行

Transcript show: (range joinUsing: ' ')

或相反的

Transcript show: (' ' join: range)

即使元素是数字,这也会有效。

GNU Smalltalk 中,您需要更明确

Transcript show: ((range collect: [ :each | each asString ]) join: ' ')

最后,您只需使用do:separatedBy:

展开已经尝试过的内容即可
range
    do: [ :each | Transcript show: each ]
    separatedBy: [ Transcript show: ' ' ]

答案 1 :(得分:4)

与方言无关的解决方案看起来像

| first |
first := true.
range do: [:each |
    first ifTrue: [frist := false] ifFalse: [Transcript show: ' '].
    Transcript show: each]

但是,每种方言都有办法做到这一点。例如,在Pharo中,我们有#do:separatedBy:消息:

range do: [:each | Transcript show: each] separatedBy: [Transcript show: ' ']

您可能想要做的另一件事是使用Transcript space来获取

range do: [:each | Transcript show: each] separatedBy: [Transcript space]

另外,我建议采用更通用的方法,将字符串表示转储到更通用的对象上,例如WriteStream

dump: range on: aStream
    range do: [:each | each printOn: aStream] separatedBye: [aStream space]

所以现在你可以简单地写

<receiver> dump: range on: Transcript

获得理想的结果。

答案 2 :(得分:2)

在Squeak,Pharo和Cuis中你可以做到

 #(3 5 7 9 11 13) do: [:each | Transcript show: each; space]

获得结果。