C# Clase Array

C# 数组Matrices en C#

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 propiedadDescripciónCódigo de ejemploSalida
LengthObtiene el número total de elementos de la matriz.int[] arr = {1, 2, 3};
int length = arr.Length;
3
RankObtiene 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
IsFixedSizeDetermina si el tamaño de la matriz es fijo.int[] arr = {1, 2, 3};
bool fixedSize = arr.IsFixedSize;
true
IsReadOnlyDetermina si la matriz es de solo lectura.int[] arr = {1, 2, 3};
bool readOnly = arr.IsReadOnly;
false
IsSynchronizedDetermina si la matriz es segura para subprocesos.int[] arr = {1, 2, 3};
bool sync = arr.IsSynchronized;
false
SyncRootObtiene 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
1Clear
Establece un rango de elementos de la matriz en cero, false o null, según el tipo de los elementos.
2Copy(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.
3CopyTo(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.
4GetLength
Obtiene un entero de 32 bits que representa el número total de elementos en la dimensión especificada de la matriz.
5GetLongLength
Obtiene un entero de 64 bits que representa el número total de elementos en la dimensión especificada de la matriz.
6GetLowerBound
Obtiene el límite inferior de la dimensión especificada en la matriz.
7GetType
Obtiene el tipo de la instancia actual. Se hereda del objeto (Object).
8GetUpperBound
Obtiene el límite superior de la dimensión especificada en la matriz.
9GetValue(Int32)
Obtiene el valor en la posición especificada de una matriz unidimensional. El índice se especifica mediante un entero de 32 bits.
10IndexOf(Array, Object)
Busca el objeto especificado y devuelve el índice de la primera aparición en toda la matriz unidimensional.
11Reverse(Array)
Invierte el orden de los elementos de toda la matriz unidimensional.
12SetValue(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.
13Sort(Array)
Ordena los elementos de toda una matriz unidimensional utilizando la implementación de IComparable de cada elemento de la matriz.
14ToString
Devuelve una cadena que representa el objeto actual. Se hereda del objeto (Object).

Mas referencias de métodos

  1. AsReadOnly<T>(T[])

    • Devuelve un contenedor de solo lectura para la matriz especificada.
  2. 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.
  3. 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.
  4. Clone

    • Crea una copia superficial de la matriz.
  5. 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.
  6. ConvertAll<TInput, TOutput>(TInput[], Converter<TInput, TOutput>)

    • Convierte una matriz de un tipo en una matriz de otro tipo.
  7. 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.
  8. 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.
  9. Empty<T>

    • Devuelve una instancia de matriz vacía.
  10. Exists<T>(T[], Predicate<T>)

    • Determina si la matriz contiene elementos que cumplen la condición.
  11. 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.
  12. 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.
  13. ForEach<T>(T[], Action<T>)

    • Realiza la operación especificada en cada elemento de la matriz.
  14. GetEnumerator()

    • Obtiene el enumerador de la matriz.
  15. GetLength

    • GetLength(Int32): Obtiene el número de elementos de la dimensión especificada de la matriz.
  16. GetLongLength(Int32)

    • Obtiene la longitud de la matriz como entero de 64 bits.
  17. GetLowerBound(Int32)

    • Obtiene el índice del primer elemento de la dimensión especificada de la matriz.
  18. GetUpperBound(Int32)

    • Obtiene el índice del último elemento de la dimensión especificada de la matriz.
  19. 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.
  20. 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.
  21. LastIndexOf

    • Similar aIndexOf, pero comienza la búsqueda desde el final de la matriz.
  22. Resize<T>(T[], Int32)

    • Cambia el tamaño de una matriz unidimensional.
  23. 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.
  24. 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.
  25. Sort

    • Sort(Array): Ordena la matriz.
    • Sort<T>(T[], IComparer<T>): Ordena la matriz genérica.
  26. 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

using System;
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(ref T[] array, int newSize)

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

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

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

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

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

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

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

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 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 3

18. 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

using System;

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}
    }
}

C# 数组Arrays en C#

Otras extensiones