C# 配列の仕組みと使い方のサンプル

C#の配列の仕組みと使い方のサンプルです。

目次

仕組み 配列とは
作成 配列の宣言と同時に値を設定する(初期化)
  配列の要素の数を宣言して作成する
取得 配列の値をfor文で取得する
  配列の要素に指定の値があるか確認する(Contains/IndexOf)
追加 要素を追加する
  配列の値を変更する
ソート 配列の値をソートする
コピー 配列をコピーする
変換 配列をリストに変換する
使用 メソッドの引数と戻り値が配列
多次元 2次元配列を作成するサンプル
  ジャグ配列を作成するサンプル

配列とは

  • 1つの変数で同じ型の複数の値を保持できます。
  • 各項目を要素(element)といいます。
  • 添字の先頭は0から始まります。添字とは何番目の配列の要素かを表す数値です。
  • 以下は、MicrosoftのC# プログラミング ガイドの配列のリンクです。
    https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/arrays/

配列の宣言と同時に値を設定する(初期化)

配列の宣言と同時に値を設定するサンプルです。

using System;
class Test1
{
    static void Main()
    {
        string[] colors1 = new string[] { "赤", "黄", "青" };
        Console.WriteLine(colors1[0]);//赤
        Console.WriteLine(colors1[1]);//黄
        Console.WriteLine(colors1[2]);//青

        var colors2 = new string[] { "緑", "紫", "茶" };
        Console.WriteLine(colors2[0]);//緑
        Console.WriteLine(colors2[1]);//紫
        Console.WriteLine(colors2[2]);//茶

        var colors3 = new[] { "白", "黒", "灰" };
        Console.WriteLine(colors3[0]);//白
        Console.WriteLine(colors3[1]);//黒
        Console.WriteLine(colors3[2]);//灰
    }
}

6行目は、配列の宣言時に配列の値を設定します。
11行目は、6行目と比べて型名のstring[ ]の記述がありません。代わりにvarを使用しています。
16行目もvarを使用しています。また11行目と比べてnewの後のstringがありません。

 

配列の要素の数を宣言して作成する

配列の要素の数を宣言して作成するサンプルです。
値は後から追加します。

using System;
class Test1
{
    static void Main()
    {
        string[] colors = new string[3];
        colors[0] = "赤";
        colors[1] = "黄";
        colors[2] = "青";
        //colors[3] = "オレンジ"; //インデックスが配列の境界外ですのエラー
        Console.WriteLine(colors[0]);//赤
        Console.WriteLine(colors[1]);//黄
        Console.WriteLine(colors[2]);//青
    }
}

6行目は、 配列の数を指定しています。
7~9行目は、配列へ値をセットしています。添字は0から始まります。
10~12行目は、配列の各値を表示しています。

 

配列の値をfor文で取得する

配列の値をfor文で取得するサンプルです。

using System;
class Test1
{
    static void Main()
    {
        string[] colors1 = new string[3] { "赤", "黄", "青" };

        foreach (string s in colors1)
        {
            Console.WriteLine(s);// 赤 黄 青
        }

        for (int i = 0; i < colors1.Length; i++)
        {
            Console.WriteLine(colors1[i]);// 赤 黄 青
        }
    }
}

8~11行目は、foreach文で配列の各値を表示しています。
13~16行目は、for文で配列の各値を表示しています。

配列の要素に指定の値があるか確認する(Contains/IndexOf)

public bool Contains (string value);
public static int IndexOf (Array array, object value);

配列の要素に指定の値があるか確認するサンプルです。

using System;
using System.Linq;

class Test1
{
	static void Main()
	{
		var a = new[] { "赤", "黄", "青" };

		bool b1 = a.Contains("黄");
		Console.WriteLine(b1); // Trueが出力される

		bool b2 = a.Contains("白");
		Console.WriteLine(b2); // Falseが出力される

		int b3 = Array.IndexOf(a, "青");
		Console.WriteLine(b3); // 2が出力される

		int b4 = Array.IndexOf(a, "白");
		Console.WriteLine(b4); // -1が出力される
	}
}

8行目は、配列です。
10行目は、Containsメソッドで指定の値が存在するか確認しています。
存在する場合はtrueを、存在しない場合はFalseを返します。
16行目は、IndexOfメソッドで指定の値が存在するか確認しています。
存在する場合は位置を、存在しない場合は-1を返します。

要素を追加する

要素を追加するサンプルです。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        string[] c1 = new string[] { "赤", "黄", "青" };

        Array.Resize(ref c1, 4);

        c1[3] = "オレンジ";

        foreach (string s in c1)
        {
            Console.WriteLine(s);// 赤 黄 青 オレンジ
        }
    }
}

8行目は、配列です。
10行目は、Array.Resizeで配列の要素の数を増やしています。
ひとつめの引数のrefは、無いとエラーになります。
12行目は追加された配列の要素へ値をセットしています。

配列の値を変更する

配列の値を変更するサンプルです。

using System;
class Test1
{
	static void Main()
	{
		var a = new[] { "赤", "黄", "青" }; //配列

		a[1] = "オレンジ";

		Console.WriteLine(a[0]);// 赤が出力される
		Console.WriteLine(a[1]);// オレンジが出力される
		Console.WriteLine(a[2]);// 青が出力される
	}
}

8行目は、文字列を配列の変数に代入しています。
インデックス(添字)で変更したい要素を指定します。

配列の値をソートする

配列の値をソートするサンプルです。

using System;
class Test1
{
	static void Main()
	{
		var a = new[] { 100, 2, 99 }; //配列
		Array.Sort(a);
		Console.WriteLine(a[0]); //2が出力される
		Console.WriteLine(a[1]); //99が出力される
		Console.WriteLine(a[2]); //100が出力される

		var b = new[] { "da", "abb", "pccc" } ; //配列
		Array.Sort(b);
		Console.WriteLine(b[0]); //abbが出力される
		Console.WriteLine(b[1]); //daが出力される
		Console.WriteLine(b[2]); //pcccが出力される
	}
}

6行目は、数値の配列です。
7行目でソートをしています。
結果は、2,99,100になります。100,2,99にはなりません。
12行目は、文字列の配列です。
13行目でソートをしています。
結果は、先頭の文字のabc順に表示されます。

配列をコピーする

Array.Copy(コピー元配列,開始位置,コピー先配列,開始位置,コピーする要素数)

配列をコピーするサンプルです。

using System;
class Test1
{
	static void Main()
	{
		var a = new[] { "赤", "黄", "青" }; //配列
		var b = new string[3];  //配列

		Array.Copy(a, 0, b, 0, a.Length);

		b[1] = "オレンジ";

		foreach (string str1 in a)
		{
			Console.WriteLine(str1);// 赤 黄 青が出力される
		}
		foreach (string str1 in b)
		{
			Console.WriteLine(str1);// 赤 オレンジ 青が出力される
		}
	}
}

6行目はコピー元の配列で、7行目はコピー先の配列です。
9行目は、ArrayクラスのCopyメソッドで配列をコピーしています。
11行目は、コピー先の配列の値を変更ています。
13~20行目は、コピー先の値は変わりましたが、コピー元の値は変更されていません。

配列をリストに変換する

配列をリストに変換するサンプルです。

using System;
using System.Collections.Generic;

class Test1
{
    static void Main()
    {
        string[] c1 = new string[] { "赤", "黄", "青" };

        List<string> c2 = new List<string>(c1);

        c2.Add("オレンジ");

        foreach (string s in c2)
        {
            Console.WriteLine(s);// 赤 黄 青 オレンジ
        } 
    }
}

8行目は、配列です。
10行目は、配列からリストに変換しています。リストのコンストラクタに配列を指定しています。

メソッドの引数と戻り値が配列

メソッドの引数と戻り値が配列のサンプルです。

using System;
class Test1
{
    static void Main()
    {
        string[] colors = new string[3] { "赤", "黄", "青" };

        string[] b = GetColor(colors);
    }

    private static string[] GetColor(string[] c1)
    {
        return c1;
    }
}

8行目は、呼び出し元のメソッドです。引数と戻り値が配列です。
11行目は、定義されたメソッドです。引数と戻り値が配列です。

2次元配列を作成するサンプル

2次元配列を作成するサンプルです。

using System;
class Test1
{
    static void Main()
    {
        string[,] colors = new string[2,3]
        {
            {"赤1","黄1","青1"},
            {"赤2","黄2","青2"}
        };

        Console.WriteLine(colors[0, 0]);// 赤1
        Console.WriteLine(colors[0, 1]);// 黄1
        Console.WriteLine(colors[0, 2]);// 青1
        Console.WriteLine(colors[1, 0]);// 赤2
        Console.WriteLine(colors[1, 1]);// 黄2
        Console.WriteLine(colors[1, 2]);// 青2
    }
}

6~10行目は、2次元配列を作成しています。
12~18行目は、2次元配列の値を表示しています。

ジャグ配列を作成するサンプル

ジャグ配列を作成するサンプルです。
ジャグ配列とは、それぞれの要素の長さが異なる配列です。

using System;
class Test1
{
    static void Main()
    {
        string[][] colors = new string[3][]
        {
            new string[]{"赤1",},
            new string[]{"赤2","黄2"},
            new string[]{"赤3","黄3","青3"}
        };

        Console.WriteLine(colors[0][0]);// 赤1
//      Console.WriteLine(colors[0][1]);// 
//      Console.WriteLine(colors[0][2]);// 
        Console.WriteLine(colors[1][0]);// 赤2
        Console.WriteLine(colors[1][1]);// 黄2
//      Console.WriteLine(colors[1][2]);// 
        Console.WriteLine(colors[2][0]);// 赤3
        Console.WriteLine(colors[2][1]);// 黄3
        Console.WriteLine(colors[2][2]);// 青3
    }
}

6~11行目は、ジャグ配列を作成しています。
13~21行目は、ジャグ配列の値を表示しています。

関連の記事

C# if文のサンプル
C# for文のサンプル(break/continue)
C# Listのサンプル
C# LINQで配列の値を取得するサンプル

△上に戻る