English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# 配列(Array)

変数は文字列リテラルの値を格納するために使用され、配列は複数の文字列リテラルの値を格納するために使用されます。

配列は、同じデータ型の固定数のテキスト値(要素)を格納するデータ構造です。配列の要素はメモリ内で連続的に格納されます。

C#では、配列は一次元配列、二次元配列およびダッシュボード配列の3種類があります。ここでは、一次元配列について学びます。

以下の図は配列の表示形式を説明しています。

配列の表示

配列の宣言と初期化

配列の要素のデータ型を指定するために角括弧を使用して配列を宣言することができます。

int[] evenNums;  // 整数配列
string[] cities; // 文字列配列

以下の文は、単一の文で宣言し配列に値を追加します。

int[] evenNums = new int[5]{ 2, 4, 6, 8, 10 }; 
string[] cities = new string[3]{ "Mumbai", "London", "New York" };

上記では、evenNums配列は最大で5つの整数を格納できます。new int[5]の括弧内の数字 5 は指定された配列のサイズです。同様に、cities配列のサイズは3。配列の要素は、カンマで区切られたリストとして大括弧{}に追加されます。

配列の型変数は方括号[]なしでvarを使用して宣言できます。

var evenNums = new int[]{ 2, 4, 6, 8, 10}; 
var cities = new string[]{ "Mumbai", "London", "New York" };

宣言時に配列の要素を追加する場合、sizeはオプションです。コンパイラは大括弧内の要素の数に基づいてサイズを推測します。

int[] evenNums = { 2, 4, 6, 8, 10}; 
string[] cities = { "Mumbai", "London", "New York" }

以下のサンプルでは無効な配列の宣言を示します。

//サイズを指定する必要があります 
int[] evenNums = new int[]; 
//要素の数は指定されたサイズと一致する必要があります 
int[] evenNums = new int[5] { 2, 4 };
//varと配列の初期化プログラムを一緒には使用できません
var evenNums = { 2, 4, 6, 8, 10};

遅延初期化

配列を宣言し初期化する必要はありません。まず配列を宣言し、その後 new演算子を使用して初期化することができます。

int[] evenNums;
evenNums = new int[5];
// または
evenNums = new int[]{ 2, 4, 6, 8, 10 };

配列の要素にアクセス

インデックスを使用して配列の要素にアクセスできます。インデックスは、配列の各要素に関連付けられた数字で、インデックス0から配列のサイズまでです-1 終了。

以下のサンプルではインデックスを使用して追加/更新および要素の取得。

int[] evenNums = new int[5];
evenNums[0] = 2;
evenNums[1] = 4;
//evenNums[6] = 12;  //投げ出す実行時例外IndexOutOfRange
Console.WriteLine(evenNums[0]);  //出力 2
Console.WriteLine(evenNums[1});  //出力 4

注意:指定されたサイズを超える要素を追加しようとすると、IndexOutOfRangeException 例外がスローされます。

forループを使用して配列にアクセスする

forループを使用して配列要素にアクセスします。forループの条件式では配列の length プロパティを使用します。

int[] evenNums = { 2, 4, 6, 8, 10 };
for(int i = 0; i < evenNums.Length; i++}
    Console.WriteLine(evenNums[i]);  
}
for(int i = 0; i < evenNums.Length; i++}
    evenNums[i] = evenNums[i] + 10;  // 各要素の値を更新する10
}

foreach ループを使用して配列にアクセスする

インデックスを使用せずに配列の要素の値を読み取るforeachループを使用します。

int[] evenNums = { 2, 4, 6, 8, 10}; 
string[] cities = { "Mumbai", "London", "New York" }; 
foreach(var item in evenNums){
    Console.WriteLine(item);   
}
foreach(var city in cities){
    Console.WriteLine(city);
}

LINQメソッド

C#のすべての配列は抽象基底クラス System.Array から派生しています。

Array クラスは IEnumerable インターフェースを実装しており、Max()、Min()、Sum()、reverse()などのLINQ拡張メソッドを使用できます。

int[] nums = new int[5]{ 10, 15, 16, 8, 6 };
nums.Max(); // 返却16
nums.Min(); // 返却6
nums.Sum(); // 返却55
nums.Average(); // 返却55

System.Array クラスには、配列の作成、操作、検索、ソートを行うメソッドが含まれています。

int[] nums = new int[5]{ 10, 15, 16, 8, 6 };
Array.Sort(nums); // 配列をソートする 
Array.Reverse(nums); // 配列を降順にソートする
Array.ForEach(nums, n => Console.WriteLine(n)); // 配列をイテレートする
Array.BinarySearch(nums, 5);// 二分検索

配列を引数として渡す

配列をメソッド引数として渡すことができます。配列は参照型であるため、このメソッドは配列の要素の値を変更できます。

public static void Main() {
    int[] nums = { 1, 2, 3, 4, 5 };
    UpdateArray(nums); 
    foreach(var item in nums)
        Console.WriteLine(item);   
}
                    
public static void UpdateArray(int[] arr)
{
    for(int i = 0; i < arr.Length; i++)
        arr[i] = arr[i] + 10;   
}

次に学ぶ 多次元配列ジグザグ配列