👌

【C#プログラミング】配列の先頭に要素を追加する方法、末尾に追加する方法まとめ

2024/11/17に公開2

はじめに

競技プログラミングで配列の先頭や末尾に要素を追加したいときがあります。これらについてまとめました。

配列の操作方法の整理

(A) 先頭に要素を追加

  1. 直接操作
  2. Concat メソッド
  3. List を使用
  4. Prepend メソッド(おすすめ)

(B) 末尾に要素を追加

  1. 直接操作
  2. Concat メソッド
  3. List を使用
  4. Append メソッド(おすすめ)

具体例のコード

例:Aという配列の先頭に 0 を追加して、末尾に 100 を追加する

直接操作

int[] direct = new int[A.Length + 2];
direct[0] = 0;
Array.Copy(A, 0, direct, 1, A.Length);
direct[direct.Length - 1] = 100;
  • メリット: 高速でメモリ効率が良い。
  • デメリット: コードが少し複雑。

Concat メソッド

int[] concat = new[] { 0 }.Concat(A).Concat(new[] { 100 }).ToArray();
  • メリット: 簡潔で読みやすい。
  • デメリット: 途中で新しい配列を作成するため、メモリ効率が低下。

List を使用

List<int> list = A.ToList();
list.Insert(0, 0);
list.Add(100);
  • メリット: 柔軟性があり、要素の挿入や削除が容易。
  • デメリット: List に変換するためのオーバーヘッドがある。

PrependAppend メソッド

int[] prependAppend = A.Prepend(0).Append(100).ToArray();
  • メリット: シンプルで直感的。
  • デメリット: C# 8.0 以降の機能に依存。

まとめ

  • 簡潔さを重視するなら PrependAppend
  • パフォーマンスを重視するなら 直接操作
  • 柔軟性が欲しい場合は List を使用。

用途に応じて、最適な方法を選んでください。私は競技プログラミングで**PrependAppend** を使用しています。

おすすめ・参考書籍

問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)
https://amzn.to/3YFmdH5

Discussion

いぬいぬいぬいぬ

競技プログラミングではまだ利用できないかもしれませんが、
C#12.0以降ならコレクションリテラル + spread要素(..) が使えますね。

//元の配列
int[] A = [1,2,3];

//配列の先頭に 0 を追加して、末尾に 100 を追加
int[] B = [0, ..A, 100];
まるまる

コメントありがとうございます。こんな便利なメソッドもあるのですね。C#がアップデートされるたびに公式ドキュメントから情報を得ているのでしょうか?
競技プログラミングは確かにバージョンが古くてエラーになること多いです。。。