深いコピーと浅いコピーに関する私の理解が正しければ、私の質問は不可能です。配列 (a[10]) があり、浅いコピー (b[20]) を実行する場合、b のデータが連続していないため、これは不可能ではないでしょうか?
私がこれを完全に間違っている場合、配列のサイズを変更するために再割り当てを行うc ++の機能を(c#で)模倣する迅速な方法を誰かがアドバイスできます。
注
System.Array オブジェクトの .Clone() および .Copy() メンバーを見ています。
深いコピーと浅いコピーに関する私の理解が正しければ、私の質問は不可能です。配列 (a[10]) があり、浅いコピー (b[20]) を実行する場合、b のデータが連続していないため、これは不可能ではないでしょうか?
私がこれを完全に間違っている場合、配列のサイズを変更するために再割り当てを行うc ++の機能を(c#で)模倣する迅速な方法を誰かがアドバイスできます。
注
System.Array オブジェクトの .Clone() および .Copy() メンバーを見ています。
既存の配列のサイズを変更することはできませんが、次を使用できます。
Array.Resize(ref arr, newSize);
これにより、新しい配列が割り当てられ、データが古い配列から新しい配列にコピーされ、arr
変数が更新されます (この場合は参照によって渡されます)。そうですか?
ただし、古い配列を指している他の参照は更新されません。より良いオプションは、使用するList<T>
ことです。手動でサイズを変更する必要はなく、古い参照の問題もありません。Add
/などだけですRemove
。通常、配列を直接使用することはあまりありません。それらには用途がありますが、デフォルトのケースではありません。
あなたのコメントを再;
List<T>
しません。これは、ジェネリックに関するポイントの 1 つです。ボンネットの下にList<T>
はラッパーがありT[]
、 aにはボクシングList<int>
がありません。int[]
古いArrayList
ものは のラッパーobject[]
であるため、ボックスを実行します。もちろん、ボクシングはあなたが思っているほど悪くはありません。Array.Resize
; T
に使用Buffer.BlockCopy
List<T>
実装しない限り、より迅速になります)。List<T>