C#で配列の要素を削除する方法!(LINQやリスト変換で削除など)

C#C#

C#の配列の要素を削除する方法について書いています。
載せているコードについては、.Netのバージョン6(C#のバージョン10)で確認しました。

PR

配列の要素を削除する

C#の配列は要素数を指定して定義します。
そのため配列は固定サイズで、作った後に配列の要素数を簡単に削除することはできません。

本当に配列のサイズを変更する必要があるのでしょうか。
このように、使用しない配列要素に空文字や0などの既定値を設定するようにして、処理するという方法もあるかと思います。

var fruits = new string[3] {"orange", "banana", "grape"};
fruits[1] = "";

foreach(string fruit in fruits) {
    if (fruit != "") {
        Console.WriteLine(fruit); // orange grape
    }
}
Console.WriteLine(fruits.Length); // 3

文字列の3つの要素を初期値で入れて、fruits配列を作成しました。
配列の1番目「banana」の位置に空文字(“”)を入れました。(空文字の場合は削除とみなします。。)

foreach文でループさせるときに、配列が空文字でなかったら出力するようにしました。
これで、「orange」と「grape」のみ出力されます。
このように、この値なら削除されたというようにして、処理することもできるかと思います。

最後にLengthプロパティにアクセスすると、3になっています。
配列のサイズは変わりません。

PR

配列の要素を全て削除する

ArrayクラスのClearメソッドを呼び出して、配列を渡すことで、すべての要素を空(既定値)にします。
string配列の場合は、nullが入って、int配列の場合は0が設定されます。

var fruits = new string[3] {"orange", "banana", "grape"};
Array.Clear(fruits);

foreach(string fruit in fruits) {
    Console.WriteLine(fruit);
}

上記は、先ほどと同じように、3つの文字列を要素に配列を作成しています。
その次にArray.Clearで要素を空(規定値)に設定しています。

配列のすべての要素にnullが設定されます。
foreach文で確認すると、空の出力が3回行われました。
fruit != null」というif文を追加すると、防ぐことが可能です。

下記は、数値を要素にした例になります。

var numbers = new int[3] {10, 20, 30};
Array.Clear(numbers);

foreach(int number in numbers) {
    Console.WriteLine(number);
}

3つの要素のnumbers配列を作成しました。
その次にArray.Clearを使って、クリア処理をしています。

配列の要素にはすべて「0」が設定されます。
foreach文で出力すると、「0」が3回出力されました。

文字列でも、数値配列でも、先ほどと同様に配列のサイズは変わりません。
繰り返しになりますが、この処理では既定値が設定されただけです。

Array.Clearメソッドについて、詳しくは公式のこちらのドキュメントに記載があります。

配列の要素を削除する(サイズ変更)

LINQを使って、配列のサイズも変更しつつ削除することができます。
例えば、このように使うことができます。

var drinks = new string[3] {"water", "beer", "cola"};
drinks = drinks.Where(value => value != "beer").ToArray();

foreach (string drink in drinks) {
    Console.WriteLine(drink);
}
Console.WriteLine(drinks.Length); // 2

3つの文字列を格納したdrinks配列を作成しました。
次の行でLINQを使って、配列の要素が「beer」じゃないものだけ、drinks配列に格納しなおしています。

foreach文でループして確認すると、「water」と「cola」だけが出力されます。
Lengthプロパティにアクセスすると、配列のサイズも「2」になっています。

配列をListに変換して削除する

配列をListに変換して、要素を削除することもできます。
例えば、このように使います。

var drinks = new string[4] {"water", "beer", "cola", "wine"};
var drinkList = new List<string>();

drinkList = drinks.ToList();
drinkList.RemoveAt(2);

foreach (string drinkItem in drinkList) {
    Console.WriteLine(drinkItem);
}
Console.WriteLine(drinkList.Count);

4つの文字列を格納したdrinks配列を作成しました。
次の行で、文字列のListのdrinkListを作成しています。

drinks配列からToListメソッドを呼ぶことで、Listに変換できます。
drinks配列をListに変換した後に、作成したdrinkListに格納しています。
その次の行で「drinkList.RemoveAt(2)」とすることにより、リストの2番目の要素(cola)を削除します。

foreach文でループして確認すると、「water・beer・wine」が出力されます。
drinkListの要素数は、Countプロパティで確認することができます。
確認すると「cola」の要素が減ったので、「3」が返ってきました。

おわりに

今回はC#で配列の要素を削除する方法について書きました。
LINQやListを使うと、配列のサイズも変えることが可能でしたが、動的にサイズ変更する場合には最初からListを使っていた方がいいような気がします。
固定サイズで処理できる場合のみ、配列を使っていくと良いのではないでしょうか。

コメント

Ads Blocker Image Powered by Code Help Pro

広告ブロッカーが検出されました。

ブラウザの拡張機能を使用して広告ブロックをしていることが確認できました。 ブラウザの広告ブロッカー機能を無効にしていただくか、codelikes.comをホワイトリストに追加し、更新をクリックしてください。 お手数ですが、よろしくお願いします🙇‍♂️
タイトルとURLをコピーしました