今回は配列についてです。
とりあえず覚えておく配列のポイントをまとめました。
- 配列は同じ型の変数を複数個まとめて扱えるようにしたもの
- 配列にまとめられた変数1つ1つのことを要素という
- 要素には0から順番に番号が振られる(添え字またはインデックスという)
- 添え字を使って配列の各要素にアクセスする
配列とは?
配列を使うと同じ型の変数をまとめて一つの変数にすることができます。
まとめられた変数1つ1つのことを要素といいます。
また要素には番号が振られ(添え字という)、その番号を使って配列の各要素にアクセスします。
配列を使うメリットとしては、添え字で各要素にアクセスができるため、ループ処理と相性がいいです。ループで一気にまとめて処理することができます。
基本的に配列は作成する時点で要素の数が決まっている場合に使用します。
途中で要素を追加・削除したい場合は、
System.Collections.Generic.Listクラスを使います。
気になる方は、[C#] リスト(List)の使い方まとめを見てください。
配列の使い方
配列を使うには宣言を行い、初期化を行う必要があります。
それぞれ説明していきます。
配列の宣言
配列の宣言はこんな感じです。
型の後ろに角かっこ [ ] を付けると配列になります。
型[] 変数名;
int[] a; //int型の配列
string[] b; //string型の配列
配列の初期化
初期化はこんな感じです。配列は参照型になるのでnewキーワードを使ってインスタンスを作成する必要があります。
int[] array1 = new int[5];
int[] array2 = { 10, 20, 30, 40, 50 };
int[] array3 = new int[5] { 10, 20, 30, 40, 50 };
int[] array4 = new int[] { 10, 20, 30, 40, 50 };
上の4つはどれもint型の変数を5個まとめた配列を作っています。
1行目は配列を作成していますが、初期値を設定してません。
この場合は [ ] の中に 要素数を指定する必要があります。
int[] array1 = new int[5]; //←5の部分です
初期値が設定されていない場合、要素には指定した型の既定値が設定されます。
値型の場合、0で埋められた値(数値型の場合は0、論理型の場合はfalse)
参照型の場合、nullが設定されます。
2行目は初期値を設定しています。
初期値は波かっこ { } の間に値をカンマ区切りで入力します。
この場合、入力された初期値の個数から要素数を判断できるため「new int[]」の部分を省略できます。
3行目は初期値を設定し、要素数を省略していないパターンです。
4行目はnewの部分を省略していないパターンです。初期値の指定があるので要素数の指定を省略しています。
配列の要素の使い方(代入)
配列の要素には0から順番に番号がふられます。この番号をインデックス(添字:そえじ)といいます。要素数が5個の場合、0~4の番号がふられます。
この番号を使って配列の各要素にアクセスします。配列名[添字]
//int型の変数を5個まとめた配列を作成
//要素数は5個なので各要素に0~4までの番号が振られる
int[] array1 = new int[5];
//各要素に値を代入
array1[0] = 10;
array1[1] = 20;
array1[2] = 30;
array1[3] = 40;
array1[4] = 50;
//指定した要素の値を表示
System.Console.WriteLine(array1[0]); //10
System.Console.WriteLine(array1[1]); //20
System.Console.WriteLine(array1[2]); //30
System.Console.WriteLine(array1[3]); //40
System.Console.WriteLine(array1[4]); //50
まとめて同じ値を代入したいときはfor文を使うと便利です。
int[] array1 = new int[5];
//Lengthプロパティを使うと要素数が取得できる
for (int i = 0; i < array1.Length; i++) {
//各要素に値を代入
array1[i] = 39;
}
//指定した要素の値を表示
System.Console.WriteLine(array1[0]); //39
System.Console.WriteLine(array1[1]); //39
System.Console.WriteLine(array1[2]); //39
System.Console.WriteLine(array1[3]); //39
System.Console.WriteLine(array1[4]); //39
インデックスを後ろからの数で指定する
^ をインデックスの前に付けると後ろから i 番目 という意味になります。
一番後ろの要素は [^1] になります。[^0]はエラーになるので注意が必要です。
using System;
class Program
{
public static void Main()
{
int[] ary1 = new int[] { 1, 2, 3, 4, 5 };
Console.WriteLine(ary1[^1]);
Console.WriteLine(ary1[^2]);
Console.WriteLine(ary1[^3]);
Console.WriteLine(ary1[^4]);
Console.WriteLine(ary1[^5]);
}
}
5
4
3
2
1
配列の要素の使い方 (for、foreach)
上でforを使って配列の各要素に値を代入していますが、値を取り出すときにもforが使えます。
int[] ary = { 2, 1, 10, 3, 4 };
for (int i = 0; i < ary.Length; i++) {
System.Console.WriteLine(ary[i]);
}
また、foreachを使うとインデックスを使わずに各要素を取り出すことができます。
int[] ary = { 2, 1, 10, 3, 4 };
foreach (int value in ary) {
System.Console.WriteLine(value);
}
foreachについては別記事でくわしく書こうと思いますが、簡単に説明すると、
foreachはforと同じように繰り返しの処理をするときに使います。
配列の各要素を順番に1つずつ取り出して処理を行うことができます。
上のサンプルだと要素数分の5回繰り返しが行われ、 int型の変数value にaryの要素が順番に代入されます。
範囲を指定して要素を取り出す
インデクサーの範囲指定( .. )で範囲を指定して要素を取り出すことができます。
インデックス i 番目から j 番目 の範囲という指定ができます。
こんな感じです。
using System;
class Program
{
public static void Main()
{
int[] ary1 = new int[] { 1, 2, 3, 4, 5 };
// 範囲を指定して要素を取り出す
var ary2 = ary1[1..4];
foreach (int value in ary2) {
Console.WriteLine(value);
}
}
}
出力結果はこんな感じです。
2
3
4
範囲指定でi 番目から j 番目とした場合、i番目からj番目の一つ前までが取得できます。返される値は元の配列と同じ型になります。このサンプルコードの場合はint[]型になります。
C# 記事まとめページに戻る(他のサンプルコードもこちら)
コメント