Smalltalk 数组操作

Smalltalk array manipulaton

我是使用 smalltalk 的新手,我正在尝试在数组中迭代数组并评估每个数组成员是否可以被 4 整除如果为真,它将 return 包含使用 [ 的元素的字节数组=20=]方法 这是我的代码:

| anArray result |
anArray := #(#(1 2 3 3 4 6 7) #(6 7 6 9 9 4 7 6) #(11 12 13 14 15 14)).
anArray select: [ :each | 
     each do: [ :ea | 
         ea \ 4 == 0 ifTrue: [ Transcript show: each printString ]
     ]
]

问题是它需要在 select 方法中使用布尔条件。你知道使用 select 方法来 return 所述输出的其他方法吗?

谢谢!

欢迎使用 Smalltalk!你的问题有点模棱两可。你想 select 每个内部数组,其中任何元素都可以被 4 整除吗?如果是这样,请尝试以下操作:

| anArray result |
anArray := #(#(1 2 3 3 4 6 7) #(6 7 6 9 9 4 7 6) #(11 12 13 14 15 14)).
anArray select: [ :eachArray | 
    eachArray anySatisfy: [ :eachElement | 
        eachElement \ 4 == 0.
    ].
].

或者您想打印内部数组中可被 4 整除的每个元素?如果是这样,请尝试以下操作:

| anArray result |
anArray := #(#(1 2 3 3 4 6 7) #(6 7 6 9 9 4 7 6) #(11 12 13 14 15 14)).
anArray do: [ :eachArray | 
    eachArray do: [ :eachElement |
        eachElement \ 4 == 0 ifTrue: [
            Transcript cr; show: eachElement.
        ].
    ].
].

(先阅读

如果你想select并打印:

anArray select: [:eachArray | 
  (eachArray anySatisfy: [:eachElement | eachElement \ 4 == 0])
      ifTrue: [Transcript cr; show: eachArray];    "no need to #printString"
      yourself]

强制由 #anySatisfy: 产生的 Boolean 由块回答。