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

C#C#

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

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

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

PR

配列を宣言する

配列の宣言は、配列のデータ型と一緒に角括弧([])を使って宣言します。
例えば、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を使うことで、配列のサイズを変更することも可能です。

PR

配列を初期化する

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

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

コメント

Ads Blocker Image Powered by Code Help Pro

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

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