GetUpperBound() and GetLowerBound() function for array

前端 未结 3 1109
无人共我
无人共我 2021-02-05 22:32

Can anyone please tell what does the two functions do? They take an integer argument which is told to be dimension. But how does the value of this integer changes the output?

3条回答
  •  执念已碎
    2021-02-05 23:14

    May be some examples make the topic clear for you

    We use GetUpperBound() to find out the upper bound of an array for given dimension, like that:

      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); 
    

    usually, GetLowerBound() returns 0, since arrays are zero-based by default, but in some rare cases they are not:

      // 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); 
    

    Typical loop using GetLowerBound and GetUpperBound is

      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];
            ...
          }
    

提交回复
热议问题