第32章 多次元インデクサ


インデクサも、配列のにように2次元、3次元、...と多次元のものを作ることができます。



宣言の仕方は、次のように行います。

要素のデータ型 this[int index1, int index2,...]{}
では、早速2次元の場合のサンプルをみてみましょう。
// mindexer01.cs

using System;

class MyClass
{
    int[,] array;

    public int this[int x, int y]
    {
        get
        {
            return array[x, y];
        }
        set
        {
            array[x, y] = value;
        }
    }
    public MyClass(int a, int b)
    {
        array = new int[a, b];
    }
}

class mindexer01
{
    public static void Main()
    {
        MyClass mc = new MyClass(4, 4);

        for (int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                mc[i, j] = i + j;
            }
        }

        for (int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                Console.WriteLine("{0} + {1} = {2}", i, j, mc[i, j]);
            }
        }
    }
}
使い方は1次元の時と全く同じです。

実行結果は次のようになります。



もちろん、多次元インデクサでもインデックスにint型以外のものを使えます。

次の例は、インデックスにstring型とint型を使ったかなり変なプログラムです。 (なお、このプログラムの地名や市外局番は架空のものです)

// mindexer02.cs

using System;

class MyTelephone
{
    public string this[string address, int phone]
    {
        get
        {
            switch (address)
            {
                case "北海道":
                    switch (phone)
                    {
                        case 166:
                            return "旭川市";
                        case 11:
                            return "札幌市";
                        default:
                            return "知りません";
                    }
                case "東京都":
                    switch (phone)
                    {
                        case 3:
                            return "23区";
                        case 422:
                            return "小金井市";
                        default:
                            return "知りません";
                    }
                default:
                    return "知りません";
            }
        }
    }
}

class mindexer02
{
    public static void Main()
    {
        string strFormat = "{0}で市外局番が{1}は{2}です";
        MyTelephone mt = new MyTelephone();

        Console.WriteLine(strFormat, "東京都", 3, mt["東京都", 3]);
        Console.WriteLine(strFormat, "北海道", 166, mt["北海道", 166]);
        Console.WriteLine(strFormat, "九州", 114, mt["九州", 114]);
    }
}
これは、変なプログラムですね。まさか、インデクサに電話帳みたいなことをさせるとは あまり思いつく人はいないでしょう。

実行結果は次のようになります。




[C# Index] [総合Index] [Previous Chapter] [Next Chapter]

Update 07/Sep/2006 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。