👌
【C#プログラミング】配列の先頭に要素を追加する方法、末尾に追加する方法まとめ
はじめに
競技プログラミングで配列の先頭や末尾に要素を追加したいときがあります。これらについてまとめました。
配列の操作方法の整理
(A) 先頭に要素を追加
- 直接操作
Concat
メソッドList
を使用-
Prepend
メソッド(おすすめ)
(B) 末尾に要素を追加
- 直接操作
Concat
メソッドList
を使用-
Append
メソッド(おすすめ)
具体例のコード
0
を追加して、末尾に 100
を追加する
例:Aという配列の先頭に 直接操作
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
に変換するためのオーバーヘッドがある。
Prepend
と Append
メソッド
int[] prependAppend = A.Prepend(0).Append(100).ToArray();
- メリット: シンプルで直感的。
- デメリット: C# 8.0 以降の機能に依存。
まとめ
-
簡潔さを重視するなら
Prepend
とAppend
。 - パフォーマンスを重視するなら 直接操作。
-
柔軟性が欲しい場合は
List
を使用。
用途に応じて、最適な方法を選んでください。私は競技プログラミングで**Prepend
と Append
** を使用しています。
おすすめ・参考書籍
問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)
Discussion
競技プログラミングではまだ利用できないかもしれませんが、
C#12.0以降ならコレクションリテラル + spread要素(
..
) が使えますね。コメントありがとうございます。こんな便利なメソッドもあるのですね。C#がアップデートされるたびに公式ドキュメントから情報を得ているのでしょうか?
競技プログラミングは確かにバージョンが古くてエラーになること多いです。。。
C#は頻繁に新しい書き方が入るのと、それが使いやすくてパフォーマンスも良かったりするので
こまめに追いかけてますね~。
普通のアプリなら、ランタイムが古くてもSDKだけ新しくして新しいC#を使う方法もあるんですが、
競技プログラミングだとそれも難しいんですよね…
こまめに追いかけられるのすごいです。。。見習って自分も頑張ってみます。
なるほど。。。専門的で漠然としたイメージしかできていませんが、勉強になります。
教えていただいてありがとうございます!