数组的GetUpperBound()和GetLowerBound(()函数
本文关键字:GetLowerBound 函数 数组 GetUpperBound | 更新日期: 2023-09-27 18:20:09
有人能告诉我们这两个函数的作用吗?他们接受一个整数参数,该参数被告知是维度。但是这个整数的值是如何改变输出的呢?
下面是我运行的一个示例。
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,那么我们为什么要需要调用此方法吗?
可能会有一些例子让您清楚地了解
我们使用CCD_ 1来找出给定维度的数组的上界,像这样:
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);
使用GetLowerBound
和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];
...
}
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,上限为length-1,但来自其他源(例如COM互操作)的数组可能有不同的边界,因此使用Excel互操作的人员将熟悉下限为1,上限为length的数组。
谁能告诉我这两个函数是干什么的吗?
它写在他们的MSDN页面上。它们获取数组中指定维度的第一个/最后一个元素的索引。看看Array.GetUpperBound
和Array.GetLowerBound
他们接受一个整数参数,该参数被告知是维度。
是的,正如Patashu提到的,数组可以是多维的。
知道GetLowerBound()为什么总是返回0吗?如果总是这样返回0,那么为什么我们需要调用此方法?
在数组中,每个维度都可以有其特定的上下限。因此,这种方法可以为数组的每个维度创建不同的结果
请注意,尽管.NET Framework中的大多数数组都是基于零的(也就是说,
GetLowerBound
方法为每个返回零数组的维度),.NET Framework确实支持不是基于零的。可以使用CreateInstance(Type, Int32'['], Int32'['])
方法,也可以从非托管代码返回。
退房;
- 解决方法:具有非零下限的数组
- 如何:在数组上指定零下限