Squeak、Cuis、または Pharo Smalltalk で ByteArray の 2 つのインスタンスを結合したい
b := #[10 11 12 13] asOrderedCollection.
b addAll: #[21 22 23 24].
b asByteArray
これを行うためのより効率的な方法はありますか?
連結した方が良いでしょうか...?
#[10 11 12 13],#[21 22 23 24 ]
はい。OrderedCollection を使用すると、いくつかの不要なオブジェクトの割り当てと冗長なコピーが必要になります。新しいバイト配列を作成し、ソース配列の内容をそれにコピーする必要があります。
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.
これは、新しい ByteArray を割り当て、プリミティブを使用してコピーするだけなので、非常に高速です。Squeak、Cuis、Pharo、そしておそらく他の Smalltalk でも動作します。