c# - 数组的 GetUpperBound() 和 GetLowerBound() 函数

标签 c# .net arrays

谁能告诉我这两个函数的作用是什么?他们采用一个整数参数,该参数被告知是维度。但是这个整数的值如何改变输出?

下面是我运行的一个例子。

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 那么我们为什么 需要调用这个方法吗?

最佳答案

可能是一些例子让你明白主题

我们使用 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); 

通常,GetLowerBound() 返回 0,因为默认情况下数组从零开始, 但在极少数情况下,它们不是:

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

使用GetLowerBoundGetUpperBound 的典型循环是

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

关于c# - 数组的 GetUpperBound() 和 GetLowerBound() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17358139/

相关文章:

C# AES 算法 - 我应该在哪里以及如何存储 key 和 IV

.net - 在 .NET 2.0+ 中使用集合相对于 List(Of T) 有什么优势

c# - C# 中 Queue<T> 的入队事件

ruby-on-rails - Ruby 从数组中计算总和

c# - 单引号 - 我如何输出它并在源代码中看到它而不是'

c# - 如何删除变量内的双引号?

java - 累积位运算

c++ - Binary/Int 文件读取 & 数组存储

c# - 如何比较 "look alike"的 Unicode 字符?

c# - 事件参数中 IEnumerable 的最佳实践