我試圖列出(30)列表(30)。 我有這樣的:如果Pharo Smalltalk中的陳述(無回報)爲flatten list
#(#(a a a) nil nil #(b) #(c) #(d) nil nil nil #(e e) nil #(f f) nil #(g)
#(h) nil nil nil #(i i) nil nil nil #(j) nil nil nil nil nil
#(k) #(l l l)
而且我希望做一個程序,輪流到這只是一個像這樣的列表:
#(a a a b c d e e f f g hi i j k l l l)
我的代碼是這樣的:
ToList: lista
| retorno y z |
retorno := Array new: 30.
y := 1.
(1 to: lista size)
do: [ :i |
z := 0.
(lista at: i) isNil
ifFalse:
(1 to: (lista at: i) size do: [ :j | retorno at: (y + z) put: ((lista at: i) at: j)
y:= y+1.
z:= z +1.]
)].
^retorno
我想if語句存在一些問題,因爲沒有回報。我不知道該怎麼做,因爲它的工作方式沒有y:= y+1.
,但它保留了一些零空格。
請幫幫我!
'flatCollect'可以在單一方法調用中處理此問題 – Alexander
您應該爲變量提供更多描述性名稱,以便代碼更易於理解。我可以是outerIndex,y可以是outputIndex,j可以是innerIndex,z ......好吧,不管你對z的意圖是什麼。 – JayK
除了亞歷山大的提示,如果你應該自己編寫一種flatCollect:考慮不要按索引訪問集合元素,而是直接訪問。而不是'1:列表大小:[:index | 「做些什麼」(list at:index)]'簡單地寫'list do:[:each | 「與每個人做某事]'。對於輸出,您可以使用OrderedCollection而不是Array來簡單地使用'add:'來追加元素。你也可以看看Squeak/Pharo所有藏品都能理解的信息:「收集:」。 – JayK