C#の配列の要素を削除する方法について書いています。
載せているコードについては、.Netのバージョン6(C#のバージョン10)で確認しました。
配列の要素を削除する
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になっています。
配列のサイズは変わりません。
配列の要素を全て削除する
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を使っていた方がいいような気がします。
固定サイズで処理できる場合のみ、配列を使っていくと良いのではないでしょうか。
コメント