質問

I want to join two instance of ByteArray in Squeak, Cuis or Pharo Smalltalk

b := #[10 11 12 13] asOrderedCollection.
b addAll: #[21 22 23 24].
b asByteArray

Are there more efficient ways to do this?

役に立ちましたか?

解決

Would concatenation be better...?

#[10 11 12 13],#[21 22 23 24 ]

他のヒント

Yes. Using an OrderedCollection will involve several unnecessary object allocations and redundant copying. You should create a new byte array and copy the contents of your source arrays into it:

a := #[10 11 12 13].
b := #[21 22 23 24].
c := ByteArray new: (a size + b size).
c replaceFrom: 1 to: a size with: a startingAt: 1.
c replaceFrom: a size + 1 to: c size with: b startingAt: 1.

This only allocates the new ByteArray and does the copying with primitives, so it's quite fast. It'll work in Squeak, Cuis and Pharo, and very likely other Smalltalks as well.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top