ホームページ  >  記事  >  バックエンド開発  >  C#学習日記29---2次元インデクサーとforeachトラバーサルインデクサー

C#学習日記29---2次元インデクサーとforeachトラバーサルインデクサー

黄舟
黄舟オリジナル
2017-01-21 15:43:031594ブラウズ

前回の記事の最後で、電源が切れそうになったため、いくつか質問を残しました。この記事では、前回の記事の内容を続けていきます。前の記事に戻るには、ここをクリックしてください。 1 質問 1: 多次元配列はありますが、インデクサーは多次元にできますか? ? ?

インデクサーは多次元にすることができます。前の記事で定義したインデクサーは、配列と同様に 1 次元のインデクサーのみを定義できます。たとえば、映画館の映写室の座席番号にインデックスを付けると、最初の行の 1 列目が 1 番、最初の行が 2 番になります...次のようになります:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test1  
{//定义cinema类包含一个二维数组与一个二维访问器  
    class cinema  
    {//定义一个二维数组  
        private string[,] seat = new string[5, 5];  
    //定义一个二维访问器  
        public string this[uint a, uint b]  
        {  
            get { return seat[a, b]; }  
            set { seat[a, b] = value; }  
          
        }  
      
    }  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            cinema movieroom = new cinema();//实例化  
            //for循环遍历写入  
            for (uint i = 1; i < 5; i++)  
            {  
                for (uint j = 1; j < 5; j++)  
                {  
                    movieroom[i, j] = "第" + i + "排 第" + j + "列";  
                }  
            }  
            //for循环遍历读出  
            for (uint i = 1; i < 5; i++)  
            {  
                for (uint j = 1; j < 5; j++)  
                {  
                    Console.WriteLine(movieroom[i,j]+"\t"+((i-1)*4+j)+"号");               
                  
                }  
              
            }  
        }  
    }  
}

結果:

これは 2 次元のインデクサーが行うことです。他の多次元の数値も同じ方法で推定できるため、導入されません。

C#学習日記29---2次元インデクサーとforeachトラバーサルインデクサー

質問 2: 配列は簡単で高速な走査に Foreach ステートメントを使用できます。インデックスは Foreach ステートメントを使用して走査できますか? ? ? fuse ’s' s 's’ s ’out sprow stul' s s the 'sを通して' s ’sを介して - - - - - 、

string[] str = new string[] { "HC1", "HC2", "HC3", "HC4" };//定义一个数组  
            foreach (string i in str)//使用foreach遍历  
            {  
                Console.WriteLine(i);  
            }
eを使用するforeach ステートメントは次のコード セグメントに解析されます。

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Collections; //注意添加这个命名空间,否则没有IEnumerator这个类  
  
namespace Example  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            string[] str = new string[] {"HC1","HC2","HC3","HC4" }; //定义一个数组  
          //调用GetEnumerator()方法,获得数组的一个枚举  
            IEnumerator per = str.GetEnumerator();  
          //在while循环中,只要MoveNext()返回true,就一直循环下去  
            while (per.MoveNext())  
            {  
                //用Current属性访问数组中的元素  
                string p = (string)per.Current;  
                Console.WriteLine(p);  
            }  
        }  
    }  
}

結果は同じです:

string の定義を調べたところ、string は IEnumerable インターフェイスから継承しており、IEnumerable インターフェイスには GetEnumerator() メソッドが 1 つしかないことがわかりました。このメソッドの機能は、コレクションを反復処理する列挙子 IEnumerator を返すことです。これは、メソッド宣言が 3 つだけあるインターフェイスでもあります。Current (現在の値を取得します)。コレクション内の要素)、MoveNext (列挙子はコレクションの次の要素に進み、成功した場合は true を返し、最後に到達した場合は false を返します)、Reset (列挙子を最初の要素の前である初期位置に設定します)コレクション内)、つまり、カスタム クラスに GetEnumerator メソッド、および Current メソッドと MoveNext メソッドを実装していない場合、foreach ステートメントを使用して走査することはできません。

foreach ステートメントはカスタム クラスをトラバースします:

これも上記の映画館の例ですが、今回は for ループの出力を使用せず、次のように foreach ステートメントのトラバース出力を実装します。 :

C#学習日記29---2次元インデクサーとforeachトラバーサルインデクサー


結果は同じです。 。 。 。

上記は C# 学習日記 29 の内容です ----2 次元インデクサーと foreach トラバーサル インデクサー その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。