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
コメント