C# Clase Array
La clase Array es la clase base de todas las matrices en C#. Se define en el espacio de nombres System. La clase Array proporciona varias propiedades y métodos para las matrices.
La clase Array en C# es la clase base de todas las matrices y se encuentra en el espacio de nombres System.
Una matriz es una colección que se utiliza para almacenar un número fijo de elementos del mismo tipo. Comprender las características y métodos de la clase Array es muy importante para escribir programas C# de manera eficiente.
A continuación se presenta una introducción detallada a la clase Array de C#, incluyendo sus características, métodos comunes, propiedades y ejemplos de uso.
Características
- Seguridad de tipos: Las matrices solo pueden almacenar elementos del tipo especificado, y el tipo se determina en el momento de la declaración.
- Longitud fija: La longitud de una matriz no se puede modificar después de su creación.
- Acceso por índice: Los elementos de una matriz se acceden mediante un índice, que comienza desde 0.
- Soporte multidimensional: C# admite matrices unidimensionales, multidimensionales y escalonadas (matrices de matrices).
Propiedades de la clase Array
La siguiente tabla enumera algunas de las propiedades más utilizadas de la clase Array:
| Nombre de la propiedad | Descripción | Código de ejemplo | Salida |
|---|---|---|---|
| Length | Obtiene el número total de elementos de la matriz. | int[] arr = {1, 2, 3};int length = arr.Length; | 3 |
| Rank | Obtiene el número de dimensiones de la matriz (es decir, la dimensión de la matriz). | int[,] matrix = new int[2, 3];int rank = matrix.Rank; | 2 |
| IsFixedSize | Determina si el tamaño de la matriz es fijo. | int[] arr = {1, 2, 3};bool fixedSize = arr.IsFixedSize; | true |
| IsReadOnly | Determina si la matriz es de solo lectura. | int[] arr = {1, 2, 3};bool readOnly = arr.IsReadOnly; | false |
| IsSynchronized | Determina si la matriz es segura para subprocesos. | int[] arr = {1, 2, 3};bool sync = arr.IsSynchronized; | false |
| SyncRoot | Obtiene el objeto utilizado para sincronizar el acceso a la matriz, generalmente usado en operaciones multiproceso. | int[] arr = {1, 2, 3};object syncRoot = arr.SyncRoot; | syncRoot |
Para obtener la lista completa de propiedades de la clase Array, consulte la documentación de C# de Microsoft.
Métodos de la clase Array
La siguiente tabla enumera algunos de los métodos más utilizados de la clase Array:
| N.º | Método & Descripción |
|---|---|
| 1 | Clear Establece un rango de elementos de la matriz en cero, false o null, según el tipo de los elementos. |
| 2 | Copy(Array, Array, Int32) Copia un rango de elementos de la matriz comenzando desde el primer elemento hasta la primera posición de otra matriz. La longitud se especifica mediante un entero de 32 bits. |
| 3 | CopyTo(Array, Int32) Copia todos los elementos de la matriz unidimensional actual a una posición de índice especificada en una matriz unidimensional determinada. El índice se especifica mediante un entero de 32 bits. |
| 4 | GetLength Obtiene un entero de 32 bits que representa el número total de elementos en la dimensión especificada de la matriz. |
| 5 | GetLongLength Obtiene un entero de 64 bits que representa el número total de elementos en la dimensión especificada de la matriz. |
| 6 | GetLowerBound Obtiene el límite inferior de la dimensión especificada en la matriz. |
| 7 | GetType Obtiene el tipo de la instancia actual. Se hereda del objeto (Object). |
| 8 | GetUpperBound Obtiene el límite superior de la dimensión especificada en la matriz. |
| 9 | GetValue(Int32) Obtiene el valor en la posición especificada de una matriz unidimensional. El índice se especifica mediante un entero de 32 bits. |
| 10 | IndexOf(Array, Object) Busca el objeto especificado y devuelve el índice de la primera aparición en toda la matriz unidimensional. |
| 11 | Reverse(Array) Invierte el orden de los elementos de toda la matriz unidimensional. |
| 12 | SetValue(Object, Int32) Establece el valor del elemento en la posición especificada de una matriz unidimensional. El índice se especifica mediante un entero de 32 bits. |
| 13 | Sort(Array) Ordena los elementos de toda una matriz unidimensional utilizando la implementación de IComparable de cada elemento de la matriz. |
| 14 | ToString Devuelve una cadena que representa el objeto actual. Se hereda del objeto (Object). |
Mas referencias de métodos
AsReadOnly<T>(T[])
- Devuelve un contenedor de solo lectura para la matriz especificada.
BinarySearch
BinarySearch(Array, Int32, Int32, Object, IComparer): Busca un valor en una matriz ordenada, utilizando laIComparerinterfaz.BinarySearch(Array, Int32, Int32, Object): Busca un valor en una matriz ordenada, utilizando laIComparableinterfaz.BinarySearch(Array, Object, IComparer): Busca en una matriz ordenada, utilizando laIComparerinterfaz.BinarySearch(Array, Object): Busca en una matriz ordenada, utilizando laIComparableinterfaz.BinarySearch<T>(T[], Int32, Int32, T, IComparer<T>): Busca un valor dentro de un rango de una matriz genérica, utilizando laIComparer<T>interfaz.BinarySearch<T>(T[], Int32, Int32, T): Busca un valor dentro de un rango de una matriz genérica, utilizando laIComparable<T>interfaz.BinarySearch<T>(T[], T, IComparer<T>): Busca en una matriz genérica ordenada, utilizando laIComparer<T>interfaz.BinarySearch<T>(T[], T): Busca en una matriz genérica ordenada, utilizando laIComparable<T>interfaz.
Clear
Clear(Array, Int32, Int32): Establece los elementos de un rango especificado de la matriz en su valor predeterminado.Clear(Array): Borra el contenido de la matriz.
Clone
- Crea una copia superficial de la matriz.
ConstrainedCopy
- Copia un rango de elementos de la matriz de origen a la matriz de destino, garantizando que todos los cambios se realicen después de que toda la operación de copia se haya completado correctamente.
ConvertAll<TInput, TOutput>(TInput[], Converter<TInput, TOutput>)
- Convierte una matriz de un tipo en una matriz de otro tipo.
Copy
Copy(Array, Array, Int32): Copia los elementos de la matriz en la matriz de destino, con una longitud de entero de 32 bits.Copy(Array, Array, Int64): Copia los elementos de la matriz en la matriz de destino, con una longitud de entero de 64 bits.Copy(Array, Int32, Array, Int32, Int32): Copia un rango de elementos de la matriz de origen a la matriz de destino.Copy(Array, Int64, Array, Int64, Int64): Copia un rango de elementos de la matriz de origen a la matriz de destino.CopyTo(Array, Int32): Copia la matriz actual en la matriz de destino, especificando la posición de índice de la matriz de destino desde la que se comienza.CopyTo(Array, Int64): Igual que el anterior, con índice de entero de 64 bits.
CreateInstance
CreateInstance(Type, Int32): Crea una matriz unidimensional del tipo y longitud especificados.CreateInstance(Type, Int32, Int32): Crea una matriz bidimensional.CreateInstance(Type, Int32, Int32, Int32): Crea una matriz tridimensional.CreateInstance(Type, Int32[]): Crea una matriz multidimensional, utilizando las dimensiones especificadas.CreateInstance(Type, Int64[]): Crea una matriz multidimensional, utilizando dimensiones de entero de 64 bits.
Empty<T>
- Devuelve una instancia de matriz vacía.
Exists<T>(T[], Predicate<T>)
- Determina si la matriz contiene elementos que cumplen la condición.
Fill<T>(T[], T, Int32, Int32)
- Rellena todos los elementos de la matriz dentro del rango especificado, comenzando desde el índice indicado, con el valor dado.
Fill<T>(T[], T): Rellena todos los elementos de la matriz con el valor dado.
Find
Find<T>(T[], Predicate<T>): Busca el primer elemento que cumple la condición y lo devuelve.FindAll<T>(T[], Predicate<T>): Devuelve todos los elementos que cumplen la condición.FindIndex<T>(T[], Int32, Int32, Predicate<T>): Devuelve el índice del primer elemento que cumple la condición dentro del rango especificado de la matriz.FindIndex<T>(T[], Int32, Predicate<T>): Devuelve el índice del primer elemento que cumple la condición después del índice especificado.FindIndex<T>(T[], Predicate<T>): Devuelve el índice del primer elemento que cumple la condición.FindLast<T>(T[], Predicate<T>): Devuelve el último elemento que cumple la condición.FindLastIndex<T>(T[], Int32, Int32, Predicate<T>): Devuelve el índice del último elemento que cumple la condición dentro del rango especificado de la matriz.FindLastIndex<T>(T[], Predicate<T>): Devuelve el índice del último elemento que cumple la condición.
ForEach<T>(T[], Action<T>)
- Realiza la operación especificada en cada elemento de la matriz.
GetEnumerator()
- Obtiene el enumerador de la matriz.
GetLength
GetLength(Int32): Obtiene el número de elementos de la dimensión especificada de la matriz.
GetLongLength(Int32)
- Obtiene la longitud de la matriz como entero de 64 bits.
GetLowerBound(Int32)
- Obtiene el índice del primer elemento de la dimensión especificada de la matriz.
GetUpperBound(Int32)
- Obtiene el índice del último elemento de la dimensión especificada de la matriz.
GetValue
GetValue(Int32): Obtiene el valor en el índice especificado de una matriz unidimensional.GetValue(Int32, Int32): Obtiene el valor en el índice especificado de una matriz bidimensional.GetValue(Int32, Int32, Int32): Obtiene el valor en el índice especificado de una matriz tridimensional.GetValue(Int32[]): Obtiene el valor de la matriz multidimensional.
IndexOf
IndexOf(Array, Object): Devuelve el índice de la primera aparición del objeto especificado.IndexOf(Array, Object, Int32): Devuelve el índice de la primera aparición del objeto especificado dentro de un rango determinado de la matriz.IndexOf(Array, Object, Int32, Int32): Devuelve el índice de la primera aparición del objeto especificado dentro del rango especificado de la matriz.
LastIndexOf
- Similar a
IndexOf, pero comienza la búsqueda desde el final de la matriz.
- Similar a
Resize<T>(T[], Int32)
- Cambia el tamaño de una matriz unidimensional.
Reverse
Reverse(Array): Invierte el orden de los elementos de la matriz.Reverse<T>(T[]): Invierte el orden de los elementos de la matriz genérica.
SetValue
SetValue(Object, Int32): Establece el valor en el índice especificado de la matriz.SetValue(Object, Int32, Int32): Establece el valor en la posición especificada de una matriz bidimensional.
Sort
Sort(Array): Ordena la matriz.Sort<T>(T[], IComparer<T>): Ordena la matriz genérica.
TrueForAll<T>(T[], Predicate<T>)
- Determina si todos los elementos de la matriz cumplen la condición.
Para obtener la lista completa de métodos de la clase Array, consulte la documentación de C# de Microsoft.
Ejemplo
El siguiente programa demuestra el uso de algunos métodos de la clase Array:
Ejemplo
namespace ArrayApplication
{
class MyArray
{
static void Main(string[] args)
{
int[] list = { 34, 72, 13, 44, 25, 30, 10 };
Console.Write("Matriz original: ");
foreach (int i in list)
{
Console.Write(i + " ");
}
Console.WriteLine();
// Invertir la matriz
Array.Reverse(list);
Console.Write("Matriz invertida: ");
foreach (int i in list)
{
Console.Write(i + " ");
}
Console.WriteLine();
// Ordenar la matriz
Array.Sort(list);
Console.Write("Matriz ordenada: ");
foreach (int i in list)
{
Console.Write(i + " ");
}
Console.WriteLine();
Console.ReadKey();
}
}
}
Cuando el código anterior se compila y ejecuta, produce los siguientes resultados:
原始数组: 34 72 13 44 25 30 10 逆转数组: 10 30 25 44 13 72 34 排序数组: 10 13 25 30 34 44 72
Ejemplos de métodos comunes
1. Array.Clear(Array, int index, int length)
Establece un rango de elementos de la matriz en su valor predeterminado del tipo correspondiente.
int[] arr = {1, 2, 3, 4, 5};
Array.Clear(arr, 1, 2); // arr = {1, 0, 0, 4, 5}2. Array.Copy(Array sourceArray, Array destinationArray, int length)
Copia elementos de la matriz de origen a la matriz de destino.
int[] source = {1, 2, 3};
int[] destination = new int[3];
Array.Copy(source, destination, 3); // destination = {1, 2, 3}
3. Array.Clone()
Crea una copia superficial de la matriz.
int[] arr = {1, 2, 3};
int[] clonedArr = (int[])arr.Clone();
4. Array.IndexOf(Array array, object value)
Devuelve el índice de la primera aparición del elemento especificado en una matriz unidimensional.
int[] arr = {1, 2, 3, 2};
int index = Array.IndexOf(arr, 2); // index = 1
5. Array.LastIndexOf(Array array, object value)
Devuelve el índice de la última aparición del elemento especificado en una matriz unidimensional.
int[] arr = {1, 2, 3, 2};
int lastIndex = Array.LastIndexOf(arr, 2); // lastIndex = 3
6. Array.Reverse(Array array)
Invierte el orden de los elementos de una matriz unidimensional.
int[] arr = {1, 2, 3};
Array.Reverse(arr); // arr = {3, 2, 1}
7. Array.Sort(Array array)
Ordena los elementos de una matriz unidimensional en orden ascendente.
int[] arr = {3, 1, 2};
Array.Sort(arr); // arr = {1, 2, 3}
8. Array.BinarySearch(Array array, object value)
Busca un elemento en una matriz unidimensional ordenada y devuelve su índice.
int[] arr = {1, 2, 3, 4, 5};
int index = Array.BinarySearch(arr, 3); // index = 2
Nota:Antes de usar BinarySearch, la matriz debe estar ordenada.
9. Array.Resize
Cambia el tamaño de una matriz unidimensional.
int[] arr = {1, 2, 3};
Array.Resize(ref arr, 5); // arr = {1, 2, 3, 0, 0}
10. Array.Exists<T>(T[] array, Predicate
Determina si existe algún elemento que cumpla la condición en la matriz.
int[] arr = {1, 2, 3};
bool exists = Array.Exists(arr, x => x == 2); // exists = true
11. Array.Find<T>(T[] array, Predicate
Buscar el primer elemento del array que cumpla la condición.
int[] arr = {1, 2, 3, 4};
int result = Array.Find(arr, x => x > 2); // result = 3
12. Array.FindAll<T>(T[] array, Predicate
Buscar todos los elementos del array que cumplan la condición.
int[] arr = {1, 2, 3, 4};
int[] results = Array.FindAll(arr, x => x > 2); // results = {3, 4}
13. Array.FindIndex<T>(T[] array, Predicate
Devolver el índice del primer elemento que cumpla la condición.
int[] arr = {1, 2, 3, 4};
int index = Array.FindIndex(arr, x => x > 2); // index = 2
14. Array.FindLast<T>(T[] array, Predicate
Buscar el último elemento que cumpla la condición.
int[] arr = {1, 2, 3, 4};
int result = Array.FindLast(arr, x => x > 2); // result = 4
15. Array.FindLastIndex<T>(T[] array, Predicate
Devolver el índice del último elemento que cumpla la condición.
int[] arr = {1, 2, 3, 4};
int index = Array.FindLastIndex(arr, x => x > 2); // index = 3
16. Array.TrueForAll<T>(T[] array, Predicate
Determinar si todos los elementos del array cumplen la condición.
int[] arr = {1, 2, 3};
bool allPositive = Array.TrueForAll(arr, x => x > 0); // allPositive = true
17. Array.ForEach<T>(T[] array, Action
Ejecutar la operación especificada en cada elemento del array.
int[] arr = {1, 2, 3};
Array.ForEach(arr, x => Console.WriteLine(x)); // 输出 1 2 318. Array.ConstrainedCopy(Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length)
Copiar parte de los elementos de un array a otro y garantizar que, si la copia falla, no se produzcan daños en los datos.
int[] source = {1, 2, 3, 4, 5};
int[] destination = new int[5];
Array.ConstrainedCopy(source, 0, destination, 0, 5);
19. Array.Fill<T>(T[] array, T value)
Establecer todos los elementos del array al valor especificado.
int[] arr = new int[5];
Array.Fill(arr, 10); // arr = {10, 10, 10, 10, 10}
20. Array.AsReadOnly<T>(T[] array)
Devolver un envoltorio de solo lectura del array.
int[] arr = {1, 2, 3};
var readOnlyArr = Array.AsReadOnly(arr);
// readOnlyArr[0] = 5; // 编译错误,集合是只读的
Ejemplo
class Program
{
static void Main()
{
// Crear e inicializar el array
int[] numbers = {5, 2, 8, 1, 3};
// Ordenar el array
Array.Sort(numbers); // numbers = {1, 2, 3, 5, 8}
// Buscar elementos
int index = Array.BinarySearch(numbers, 5); // index = 3
// Invertir el array
Array.Reverse(numbers); // numbers = {8, 5, 3, 2, 1}
// Comprobar si existe un elemento mayor que 6
bool exists = Array.Exists(numbers, x => x > 6); // exists = true
// Multiplicar los elementos del array por 2
Array.ForEach(numbers, x => Console.WriteLine(x * 2));
// Ajustar el tamaño del array
Array.Resize(ref numbers, 7); // numbers = {8, 5, 3, 2, 1, 0, 0}
// Rellenar nuevos elementos
Array.Fill(numbers, 10, 5, 2); // Establecer los 2 elementos a partir del índice 5 en 10
// numbers = {8, 5, 3, 2, 1, 10, 10}
}
}
Matrices en C#