C#で構造体配列を効率的に動的追加する方法と実例

C言語関連

C#で構造体の配列を扱う場合、固定長の配列は初期化後にサイズを変更できません。そのため、要素を動的に追加したい場合は別の方法が必要です。本記事では、構造体配列を効率的に拡張する方法を解説します。

固定配列の制限と課題

通常の配列は初期サイズが固定されるため、新しい要素を追加するには新しい配列を作成してコピーする必要があります。

例えば、arr[2] = new Guitar(...)の後にさらに追加する場合、コピー処理を行う必要があり、メモリ効率が悪くなります。

List<T>を使用した動的追加

C#では、List<T>を使うことで、構造体の動的追加が容易になります。Listは内部で自動的に容量を拡張するため、手動でコピーする必要がありません。

例:

List<Guitar> guitars = new List<Guitar>();
guitars.Add(new Guitar("Gibson", "Les Paul", 1958));
guitars.Add(new Guitar("Fender", "Jazz Bass", 1964));
guitars.Add(new Guitar("Guild", "Bluesbird", 1971));

配列からListへの変換

既存の配列を持っている場合、ToList()メソッドを使ってListに変換することが可能です。変換後は自由に要素を追加できます。

例:

Guitar[] arr = new Guitar[2];
arr[0] = new Guitar("Gibson", "Les Paul", 1958);
arr[1] = new Guitar("Fender", "Jazz Bass", 1964);
List<Guitar> guitarList = arr.ToList();
guitarList.Add(new Guitar("Guild", "Bluesbird", 1971));

配列を使う場合の代替手段

どうしても配列を使いたい場合は、Array.Resizeを使用することで配列サイズを動的に変更できます。ただし、内部で新しい配列を生成してコピーするため、Listより効率は劣ります。

例:

Array.Resize(ref arr, arr.Length + 1);
arr[arr.Length - 1] = new Guitar("Guild", "Bluesbird", 1971);

まとめ

C#で構造体の配列を動的に扱う場合、最も効率的なのはList<T>を使用する方法です。既存の配列からも簡単にListに変換可能で、メモリ効率と操作性を両立できます。

固定配列を使う場合はArray.Resizeを用いる方法もありますが、内部コピーが発生する点に注意が必要です。

コメント

タイトルとURLをコピーしました