前回の記事の最後で、電源が切れそうになったため、いくつか質問を残しました。この記事では、前回の記事の内容を続けていきます。前の記事に戻るには、ここをクリックしてください。 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 次元のインデクサーが行うことです。他の多次元の数値も同じ方法で推定できるため、導入されません。
質問 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 トラバーサル インデクサー その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。