12

2つの機能が何をするのか誰か教えてください。彼らは次元であると言われている整数の引数を取ります。しかし、この整数の値によって出力がどのように変化するのでしょうか?

以下は私が実行した例です。

int[, ,] intMyArr = {{{ 7, 1, 3, 4 }, { 2, 9, 6, 5 } }, { { 7, 1, 3, 4 }, { 2, 9, 6, 5 }}};
Console.WriteLine(intMyArr.GetUpperBound(0));       // Output is 1
Console.WriteLine(intMyArr.GetUpperBound(1));       // Output is 1
Console.WriteLine(intMyArr.GetUpperBound(2));       // Output is 3

Console.WriteLine(intMyArr.GetLowerBound(0));       // Output is 0
Console.WriteLine(intMyArr.GetLowerBound(1));       // Output is 0
Console.WriteLine(intMyArr.GetLowerBound(2));       // Output is 0

GetLowerBound() が常に 0 を返す理由は何ですか? これが常に 0 を返す場合、なぜこのメソッドを呼び出す必要があるのでしょうか?

4

3 に答える 3

22

いくつかの例がトピックを明確にするかもしれません

次のように、指定された次元の配列の上限GetUpperBound()を見つけるために使用します。

  int[,,] A = new int[7, 9, 11];
  // Returns 6: 0th dimension has 7 items, and so upper bound is 7 - 1 = 6;
  int upper0 = A.GetUpperBound(0); 
  // Returns 8: 0th dimension has 7 items, 1st - 9 and so upper bound is 9 - 1 = 8;
  int upper1 = A.GetUpperBound(1); 
  // Returns 10: 0th dimension has 7 items, 1st - 9, 2nd - 11 and so upper bound is 11 - 1 = 10;
  int upper2 = A.GetUpperBound(2); 

配列はデフォルトでゼロベースであるため、通常は0GetLowerBound()を返しますが、まれにそうでない場合もあります。

  // A is [17..21] array: 5 items starting from 17
  Array A = Array.CreateInstance(typeof(int), new int[] { 5 }, new int[] { 17 });
  // Returns 17
  int lower = A.GetLowerBound(0); 
  // Returns 21
  int upper = A.GetUpperBound(0); 

GetLowerBoundandを使用した典型的なループGetUpperBound

  int[] A = ...

  for(int i = A.GetLowerBound(0); i <= A.GetUpperBound(0); ++i) {
    int item = A[i];
    ...
  }

  // ... or multidimension

  int[,,] A = ...;

  for (int i = A.GetLowerBound(0); i <= A.GetUpperBound(0); ++i)
    for (int j = A.GetLowerBound(1); j <= A.GetUpperBound(1); ++j)
      for (int k = A.GetLowerBound(2); k <= A.GetUpperBound(2); ++k) {
        int item = A[i, j, k];
        ...
      }
于 2013-06-28T06:24:32.493 に答える
7

GetUpper/LowerBound()次元を指定する整数パラメータ。

いくつかの例:

// One-dimensional array
var oneD = new object[5];
Console.WriteLine("Dimension 0 Lower bound: {0}", oneD.GetLowerBound(0)) // Outputs "Dimension 0 Lower bound: 0"
Console.WriteLine("Dimension 0 Upper bound: {0}", oneD.GetUpperBound(0)) // Outputs "Dimension 0 Upper bound: 4"

// Two-dimensional array
var twoD = new object[5,10];
Console.WriteLine("Dimension 0 Lower bound: {0}", twoD.GetLowerBound(0)) // Outputs "Lower bound: 0"
Console.WriteLine("Dimension 0 Upper bound: {0}", twoD.GetUpperBound(0)) // Outputs "Upper bound: 4"
Console.WriteLine("Dimension 1 Lower bound: {0}", twoD.GetLowerBound(1)) // Outputs "Lower bound: 0"
Console.WriteLine("Dimension 1 Upper bound: {0}", twoD.GetUpperBound(1)) // Outputs "Upper bound: 9"

C# 内で定義された配列は下限 = 0 で上限 = 長さ - 1 ですが、他のソース (COM 相互運用など) からの配列は異なる境界を持つ可能性があるため、たとえば Excel 相互運用で作業する人は、下限 = を持つ配列に慣れているでしょう。 1、上限 = 長さ。

于 2013-06-28T06:09:22.260 に答える