4

Squeak、Cuis、または Pharo Smalltalk で ByteArray の 2 つのインスタンスを結合したい

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

これを行うためのより効率的な方法はありますか?

4

2 に答える 2

9

連結した方が良いでしょうか...?

#[10 11 12 13],#[21 22 23 24 ]
于 2013-02-08T11:18:37.773 に答える
4

はい。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 でも動作します。

于 2013-02-07T19:47:50.323 に答える