C#の配列まとめ(宣言 / 初期化 / 追加 / 検索 / 結合など)

C# C#

C#で配列を使うときの操作をまとめました。
配列操作の下記のことについて書いています。

・宣言
・初期化
・要素数
・取得
・追加
・削除
・検索
・結合

サンプルコードには.NET6(C#バージョン10)を使っています。
それでは、詳しく確認していきましょう。

配列を宣言する

配列の宣言は、配列のデータ型と一緒に角括弧([])を使って宣言します。
例えば、string型の配列、fruitsは下記のようになります。

string[] fruits;

int型の配列、numbersは下記のようになります。

int[] numbers;

配列を使う

実際に配列を使い始める時には、newキーワードを使って要素数を指定します。

string[] fruits;
fruits = new string[3];

fruits[0] = "apple";

newキーワードで配列を作った後に、配列の0番目に対して「apple」を代入しています。

C#の配列のサイズは固定長になります。動的に値を入れたい場合にはListを使いましょう。
後述していますが、Array.Resizeを使うことで、配列のサイズを変更することも可能です。

配列を初期化する

配列の宣言と一緒に、値を代入して初期化することが可能です。

string[] fruits = new string[3] {"orange", "grape", "apple"};

string型のfruits配列を3つの要素が入る大きさで作成して、「”orange”・”grape”・”apple”」で初期化しています。
下記の場合は、int型のnumbers配列を5つの要素で作成して、5個の数値を入れています。

int[] numbers = new int[5] {11, 20, 33, 40, 55};

varを使うことができる

配列の宣言と一緒に初期化する時には、varを使って配列を作成することが可能です。
配列の宣言と初期化を別々にする場合にはvarを使うことができません。

例えば、下記のように使うことができます。

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

代入している箇所を見ることで、データ型がわかるので、宣言が簡単なvarを使っていくと良さそうです。

配列の要素数を取得する

配列の要素数を取得は、配列のLengthプロパティにアクセスすると取得することが可能です。

var fruits = new string[3] {"orange", "grape", "apple"};
Console.WriteLine(fruits.Length); // 3

fruits配列を3つの要素で作成しています。
fruits配列のLengthプロパティにアクセスして、要素数を取得しました。
取得内容を出力すると、要素数の「3」が確認できました。

配列の要素を取得する

配列要素に要素番号を指定してアクセスすることで、配列の要素を取得することが可能です。
例えば、下記のように取得することができます。

string[] fruits = new string[5];
fruits[0] = "orange";
fruits[1] = "grape";
fruits[2] = "apple";

Console.WriteLine(fruits[1] + "はぶどうです。"); // grapeはぶどうです。

fruits配列を5個の要素が入るサイズで作っています。
その次に配列の0番目から「”orange”・”grape”・”apple”」を代入しています。

Console.WriteLineでコンソールに出力します。
出力内容として、配列の1番目にアクセスして文字列を取り出した文字列と、「”はぶどうです。”」を連結して出力しています。

結果を確認すると、「grapeはぶどうです。」になりました。

空の要素に気をつける

foreach文を使用したときに、配列に要素が入っていない空の箇所がある場合にもループしてしまうので、気をつけましょう。

string[] fruits = new string[5];
fruits[0] = "orange";
fruits[1] = "grape";
fruits[2] = "apple";

foreach (string fruit in fruits) {
    Console.WriteLine("フルーツは" + fruit + "です。");
}

先ほどの配列の内容をループして、コンソールに表示する内容を書いてみました。
foreachを使用して、配列の要素数分ループしています。

出力内容を確認すると、下記のようになります。

フルーツはorangeです。
フルーツはgrapeです。
フルーツはappleです。
フルーツはです。
フルーツはです。

このように要素が無い空の箇所でもループ対象になるので、気をつけたいところです。

配列の要素を追加する

配列の要素が空いていない場合には、Array.Resizeを使うことで、要素数を増やして追加することが可能です。
要素数を気にせずに、動的にデータを使いたい場合にはListを使いましょう。

例えば、下記のようにして、配列の要素数を増やして追加することが可能です。

var numbers = new int[3] {11, 20, 33};

Array.Resize(ref numbers, 4);
numbers[numbers.Length - 1] = 77;

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

最初にnumbers配列を3つの要素で作成しています。

その後にArray.Resizeを使って、配列のサイズを4つに増やしています。
numbers[numbers.Length - 1]で配列の最後(3番目)を指定して、「77」を入れました。

結果を出力すると、下記のように要素数が増えたことが確認できました。

11
20
33
77

配列の要素を削除する

LINQを使うことで、C#の配列要素を削除することが可能です。

var fruits = new string[3] {"orange", "grape", "apple"};
fruits = fruits.Where(value => value != "grape").ToArray();

foreach (string fruit in fruits) {
    Console.WriteLine("フルーツは" + fruit + "です。");
}

fruits配列を3個の要素で、初期化して作成しました。

次の行でLINQを使って、条件に合う値を取得しています。
Whereメソッドの中に、条件式を書いています。
valueに配列の値をひとつずつ展開して、比較されます。
“grape”ではないものを取得しているので、”grape”が消えて、”orange”と”apple”のみが取得できます。

その後のToArrayメソッドで、配列を返してfruits配列を上書きしています。
結果、”grape”が消えて、下記のように出力されます。

フルーツはorangeです。
フルーツはappleです。

配列の要素を検索する

Array.IndexOfを使って、配列の要素を検索し、配列に要素が存在するか確認することが可能です。
Array.IndexOfは要素が存在すれば、要素番号を返します。存在しない場合には「-1」を返します。

var fruits = new string[5] {"orange", "grape", "apple", "banana", "lemon"};
int result = Array.IndexOf(fruits, "banana");

Console.WriteLine(result); // 3

fruits配列を5個の要素で、初期化して作成しました。

次の行で、Array.IndexOfを使っています。
第1引数に配列を指定して、第2引数に探したい要素を指定しています。

result変数で、結果を取得しています。
今回の場合は指定した「banana」が配列のあるので、出力すると要素番号の「3」が返ってきました。

配列に存在するかの確認

返り値が「-1」でなかった場合は、配列に存在すると言えるので、下記のようにif文を書くことができます。

var fruits = new string[5] {"orange", "grape", "apple", "banana", "lemon"};
int result = Array.IndexOf(fruits, "banana");

if (result != -1) {
    Console.WriteLine("bananaは配列に存在する");
}

先ほどのプログラムの出力箇所を変えてみました。
resultで返ってきた値が「-1」でない場合には、存在するということになります。

配列を結合する

LINQを使うことで、配列の結合を簡単に行うことが可能です。

var fruits1 = new string[3] {"orange", "grape", "apple"};
var fruits2 = new string[2] {"melon", "cherry"};

string[] fruits = fruits1.Concat(fruits2).ToArray();

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

まず、fruits1配列を3つの要素で作成しました。
次にfruits2配列は2つの要素で作成しました。

そして、fruit1配列とfruits2配列を結合しています。
fruits1配列からConcatメソッドを呼んで、fruits2配列を渡しています。
この後にToArrayメソッドを呼ぶことで、結合された配列が返ってきます。

fruits変数で結合された配列を受け取りました。
内容をforeachで全て出力すると、下記のようにfruits1とfruits2が結合されて、全ての要素が出力されました。

orange
grape
apple
melon
cherry

コメント

タイトルとURLをコピーしました