在集合中的元素之前丢弃元素的最佳方法

use*_*097 1 smalltalk pharo

鉴于任何字符串,如'Lorem ipsum dolor sit amet,consectetuer adipiscing elit',我想在坐下之前丢弃每个单词.我已经检查过String中的方法但是找不到这个方法非常有用.这是我的尝试:

| phrase newPhrase |
phrase := 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit'.
newPhrase := phrase substrings.
phrase substrings do: [: word | word = 'sit' ifFalse: [ newPhrase := newPhrase allButFirst ] ifTrue: [ ^ nil ] ].
newPhrase joinUsing: String space
Run Code Online (Sandbox Code Playgroud)

在工作区中进行评估时,它会回答为零,但是必须有一个聪明的方法吗?

Ale*_*min 6

代码:

phrase substrings do: [: word | word = 'sit' ifFalse: [ ... ] ifTrue: [ ^ nil ] ].
Run Code Online (Sandbox Code Playgroud)

找到单词sit时返回nil.

请注意,Smalltalk 中的^始终从封闭方法返回.它不会打破do:.

试试这个

坐下之前丢弃所有单词:

words := phrase substrings.
newPhrase := words allButFirst: (words indexOf: 'sit') - 1
Run Code Online (Sandbox Code Playgroud)

您可能还会发现这些收集方法很有趣:

words copyAfter: 'sit'      "all words after sit"
words copyUpTo: 'sit'       "all words before sit"
words copyUpThrough: 'sit'  "words before and including sit"
Run Code Online (Sandbox Code Playgroud)