C#の配列から要素を削除する方法【サンプルコード付きで解説】
C#の配列は固定長のため、要素を直接「削除」することはできません。そこで一般的に用いられるのが、削除したい位置以降の要素を一つ前へずらす(シフトする)ことで、実質的にその要素を取り除く手法です。
基本的な考え方:要素をシフトして削除する
まず、次のように5つの要素を持つ配列を用意します。
int[] arr = new int[5] {35, 50, 55, 77, 98};
たとえば2番目の位置(pos = 2、つまり arr[1])の要素「50」を削除したい場合は、その位置より後ろにある要素をすべて一つずつ前に移動させます。
// 削除位置以降の要素を前方へシフト
for (i = pos - 1; i < 4; i++) {
arr[i] = arr[i + 1];
}
この処理により、削除対象だった要素は後ろの要素で上書きされ、配列全体が一つ分だけ詰まった状態になります。
完全なサンプルコード
削除前後の配列の中身をコンソールに表示する、動作確認用の完全なコードがこちらです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Demo {
class Program {
static void Main() {
int i = 0;
int pos;
int[] arr = new int[5] {35, 50, 55, 77, 98};
Console.WriteLine("削除前の要素:");
for (i = 0; i < 5; i++) {
Console.WriteLine("Element[" + (i) + "]: " + arr[i]);
}
// 2番目の位置(arr[1])の要素を削除すると仮定
pos = 2;
// 要素を前方へシフト
for (i = pos - 1; i < 4; i++) {
arr[i] = arr[i + 1];
}
Console.WriteLine("削除後の要素:");
for (i = 0; i < 4; i++) {
Console.WriteLine("Element[" + (i + 1) + "]: " + arr[i]);
}
Console.WriteLine();
}
}
}
実行結果
削除前の要素: Element[0]: 35 Element[1]: 50 Element[2]: 55 Element[3]: 77 Element[4]: 98 削除後の要素: Element[1]: 35 Element[2]: 55 Element[3]: 77 Element[4]: 98
実行結果を見ると、2番目だった要素「50」が取り除かれ、それ以降の要素が一つずつ前に詰められていることがわかります。ただし、配列自体のサイズは変わらないため、末尾には余分な領域が残る点には注意が必要です。
補足:頻繁に削除するならList<T>が便利
要素の追加・削除を頻繁に行う場合は、固定長の配列ではなく可変長コレクションの List<T> を使うのがおすすめです。RemoveAt() メソッドを呼び出すだけで、指定インデックスの要素を簡単に削除できます。
var list = new List<int> {35, 50, 55, 77, 98};
list.RemoveAt(1); // インデックス1の要素「50」を削除
用途に応じて、配列のシフト処理と List<T> を使い分けるとよいでしょう。
-
Swiftの配列から特定の要素を削除する方法を徹底解説
Swiftで配列から特定の要素を削除したい場合、いくつかの方法があります。この記事では、実際のコード例を交えながら、代表的な2つの方法をわかりやすく解説します。 まずは、String型の配列を用意しましょう。 var arrayOfString = [a,b,c,f] この配列を使って、以下の2つの方法で特定の要素を削除していきます。 方法1:filterメソッドを使う Swiftの配列にはfilterメソッドが標準で用意されています。これは、指定した条件に基づいて要素を絞り込み、新しい配列として返すメソッドです。削除したい要素を条件から除外することで、実質的にその要素を取り除くことができます
-
AndroidでArrayBlockingQueueから要素を削除する方法を解説!サンプルコード付き
本記事では、Androidアプリ開発においてArrayBlockingQueueから特定の要素を削除する方法を、実際のサンプルコードとともにわかりやすく解説します。 ArrayBlockingQueueとは? 実装手順に入る前に、ArrayBlockingQueueについて簡単におさらいしておきましょう。ArrayBlockingQueueは、内部に配列を持つスレッドセーフなブロッキングキューで、要素はFIFO(First In First Out:先入れ先出し)方式で管理されます。つまり、最初に追加された要素が最も長くキューに残り、最後に追加された要素が最も短い期間しか残りません。 実装