c# - multidimensional - Diferencia entre array.GetLength(0) y array.GetUpperBound(0)
multidimensional array c# examples (6)
¿Cuál es la diferencia entre estos dos métodos y cuándo usarías uno en lugar de otro?
int[,] array = new int[4,3];
int length0 = array.GetLength(0);
int upperbound0 = array.GetUpperBound(0);
MSDN dice que GetLength devuelve la cantidad de elementos donde GetUpperBound determina el índice máximo, pero ¿cómo podría ser diferente ya que las matrices se inicializan con elementos para cada índice?
Echa un vistazo a este método (rara vez utilizado). De Docs :
public static Array CreateInstance(Type elementType, int[] lengths, int[] lowerBounds)
Crea una matriz multidimensional de las longitudes de tipo y dimensión especificadas, con los límites inferiores especificados.
Con él, puedes crear una matriz con índices desde -5 ... +5
. Si alguna vez usa este tipo de matriz, entonces GetUpperBound()
repente se vuelve mucho más útil que GetLength()-1
. También existe un GetLowerBound()
.
Pero el soporte de C # para este tipo de arreglos es bajo, no puede usar []
. Solo necesitaría esos métodos en combinación con los métodos Array.GetValue () y SetValue ().
En general, array.GetUpperBound(0) = array.Length - 1
, pero dado que podemos crear arreglos que tienen un límite inferior distinto de cero, eso no siempre es cierto.
Me doy cuenta de que esta es una pregunta antigua, pero creo que vale la pena enfatizar que GetUpperBound devuelve el límite superior de la dimensión especificada. Esto es importante para una matriz multidimensional, ya que en ese caso las dos funciones no son equivalentes.
// Given a simple two dimensional array
private static readonly int[,] USHolidays =
{
{ 1, 1 },
{ 7, 4 },
{ 12, 24 },
{ 12, 25 }
};
La propiedad Longitud generará 8, ya que hay 8 elementos en la matriz.
Console.WriteLine(USHolidays.Length);
Sin embargo, la función GetUpperBound () generará 3 ya que el límite superior de la primera dimensión es 3. En otras palabras, puedo hacer un bucle sobre los índices de matriz 0, 1, 2 y 3.
Console.WriteLine(USHolidays.GetUpperBound(0));
for (var i = 0; i <= USHolidays.GetUpperBound(0); i++)
{
Console.WriteLine("{0}, {1}", USHolidays[i, 0], USHolidays[i, 1]);
}
Si el límite inferior de su matriz es 0, puede usar cualquiera de ellos sin ninguna confusión, pero le recomendaría array.length-1 ya que se usa ampliamente. Sin embargo, si el límite inferior de su matriz es menor que 0, entonces debería usar array.GetUpperBound (0) porque en este caso array.length-1!
Array.Length
devuelve la longitud de la matriz (número de elementos) que necesita restar 1 para obtener el UpperBound.
Array.GetUpperBound(0)
devuelve el límite superior de la matriz, puede usarlo tal como está.
GetUpperBound
devuelve el índice más alto en la matriz, GetLength
devuelve el número de elementos de la matriz.
es decir, GetUpperBound = GetLength - 1