Métodos estáticos da classe Array – C#

Quando estamos trabalhando com arrays, além dos métodos da instancia (new array()), temos acesso a vários métodos estáticos existentes na classe Array.

A classe Array fornece métodos para criar, manipular, pesquisar e classificar matrizes, servindo assim como a classe base para todas as matrizes no Common Language Runtime.

AsReadOnly

Se precisarmos fornecer uma visão somente leitura de um array, podemos usar o metodo Array.AsReadOnly. Esse método simplesmente pega um array e retorna um ReadOnlyCollection.

Da documentação da microsoft temos que: “ReadOnlyCollection, fornece a classe base para uma coleção genérica e de somente leitura. Uma instância da ReadOnlyCollection é sempre somente leitura, ou seja, é apenas uma coleção com um wrapper que impede a modificação da coleção; por isso, caso as alterações sejam feitas na coleção subjacente, a coleção somente leitura reflete as alterações”

using System;
using System.Collections.ObjectModel;
namespace StaticArrays
{
    class Program
    {
        static void Main(string[] args)
        {
            var myAnimals = new[] { "Dog", "Cat", "Horse", "Bird", "Rabbit" };
            ReadOnlyCollection<string> animals = Array.AsReadOnly<string>(myAnimals);
            foreach (var item in animals)
            {
                Console.WriteLine(item);
            }
        }
    }
}
/* Console exit text:
Dog
Cat
Horse
Bird
Rabbit
*/

Observe que, por termos uma coleção somente leitura (animals), não podemos adicionar novos elementos a ela. O método add não se encontra disponível nesta classe.

FindIndex – Exists – FindLast

Para encontrar itens em um array, há toda uma série de métodos estáticos para nos ajudar. Por exemplo, se quisermos encontrar o índice de um item, podemos usar o método BinarySearch. Este método pesquisa o ArrayList inteiro usando o comparador especificado e retorna o índice baseado em zero do elemento.

Existem ainda outros métodos esticas para realizar buscas dentro do array, no exemplo abaixo podemos ver o uso de algum deles.

– FindIndex: usa um array e um predicado para nos permitir especificar o item que estamos procurando.
– Exists: testa a existência de um elemento especificado.
– FindLast: encontra a última instância do elemento indicado.

using System;
using System.Collections.ObjectModel;
namespace StaticArrays
{
    class Program
    {
        static void Main(string[] args)
        {
            var myAnimals = new[] { "Dog", "Cat", "Horse", "Bird", "Rabbit", "Bee" };

            int horseIndex = Array.FindIndex(myAnimals, _ => _.StartsWith("Hor"));
            Console.WriteLine("horseIndex: " + horseIndex); // => horseIndex: 2

            bool thereIsRabbit = Array.Exists(myAnimals, _ => _.Equals("Rabbit"));
            Console.WriteLine("thereIsRabbit: " + thereIsRabbit); // => thereIsRabbit: True

            string lastB = Array.FindLast(myAnimals, _ => _.StartsWith("B"));
            Console.WriteLine("lastB: " + lastB); // => lastB: Bee

            int birdIndex = Array.BinarySearch(myAnimals, "Bird");
            Console.WriteLine("birdIndex: " + birdIndex); // => birdIndex: -1
            Array.Sort(myAnimals); // Sort the myAnimals array to new BinarySearch
            birdIndex = Array.BinarySearch(myAnimals, "Bird");
            Console.WriteLine("birdIndex: " + birdIndex); // => birdIndex: 1
        }
    }
}

No entanto, é necessário estar ciente de que, ao usar o método BinarySearch, é necessário que a matriz seja ordenada antes de chamar o método BinarySearch. Para isso foi utilizado o método Sort que classifica os elementos em um array unidimensional.

Uma nota importando sobre o Array.sort. Este é um método tipo VOID, e o array fornecido como parâmetro é o que será organizado.

ForEach

Se queremos iterar sobre um array, podemos usar o método estático ForEach.

using System;
using System.Collections.ObjectModel;
namespace StaticArrays
{
    class Program
    {
        static void Main(string[] args)
        {
            var myAnimals = new[] { "Dog", "Cat", "Horse", "Bird", "Rabbit", "Bee" };
            Array.ForEach(myAnimals, _ => Console.WriteLine(_ + " - String size: " + _.Length) );

        }
    }
}

Este método executa a ação especificada em cada elemento do array especificado. No caso do exemplo acima, ele apenas escreve no console o conteúdo e o tamanho da string de cada elemento.

TrueForAll

Se quisermos testar se todos os elementos do array satisfazem alguma condição, podemos usar o método array.TrueForAll.

using System;
using System.Collections.ObjectModel;
namespace StaticArrays
{
    class Program
    {
        static void Main(string[] args)
        {
            var myAnimals_1 = new[] { "Dog", "Cat", "Horse", "Bird", "Rabbit", "Bee" };
            bool animalsWithStartB_1 = Array.TrueForAll(myAnimals_1, _ => _.StartsWith("B"));
            Console.WriteLine("All Starts With B: " + animalsWithStartB_1); // => false

            var myAnimals_2 = new[] { "Camel", "Canary", "Cat", "Chicken", "Chimpanzee", "Cow" };
            bool animalsWithStartB_2 = Array.TrueForAll(myAnimals_2, _ => _.StartsWith("C"));
            Console.WriteLine("All Starts With C: " + animalsWithStartB_2); // => true
        }
    }
}

Este método estático determina se cada elemento no array corresponde às condições definidas pelo predicado especificado. Nesta caso, no primeiro teste verifica se todos os elementos tem a primeira letra igual a “B” e retorna “false”. No segundo caso, ele testa o array para ver se todos os elementos iniciam com a letra “C” e neste caso retorna “true”

Reverse

O método estático Reverse inverte a sequência dos elementos em toda gama de elementos no array unidimensional.

using System;
using System.Collections.ObjectModel;
namespace StaticArrays
{
    class Program
    {
        static void Main(string[] args)
        {
            var myAnimals = new[] { "Dog", "Cat", "Horse", "Bird", "Rabbit", "Bee" };
            Console.WriteLine("Origen Array");
            Array.ForEach(myAnimals, _ => Console.WriteLine(" - " + _));
            Array.Reverse(myAnimals);
            Console.WriteLine("Reverse Array");
            Array.ForEach(myAnimals, _ => Console.WriteLine(" - " + _));
        }
    }
}
/* Console exit text:
Origen Array
 - Dog
 - Cat
 - Horse
 - Bird
 - Rabbit
 - Bee
Reverse Array
 - Bee
 - Rabbit
 - Bird
 - Horse
 - Cat
 - Dog
*/

Uma nota importando sobre o Array.Reverse. Este é um método tipo VOID, e o array fornecido como parâmetro é o que será invertido.

Conclusão

Estes são apenas alguns exemplos de todos os métodos estáticos da classe Array. Foram selecionados pois são os mais comuns de aparecerem em todo tipo de projetos C#.

Qualquer dúvida ou dicas, entre em contato: leandrolt@gmail.com

Referencia: Microsoft Array Class

Leave a Reply

Your email address will not be published. Required fields are marked *