3 maneiras de copiar um vetor em C#
Thalita Sylvia Marques
você vai aprender
Maneira lógica de copiar um vetor
3 maneiras nem tão novas utilizando a classe Array do C#
Exemplos
pré-requisitos
Compreender bem vetores
Noção básica em funções (desejável)
Curiosidade (indispensável)
lógica
Utilizando seus conhecimentos em Lógica de Programação, como você implementaria um algoritmo em C# que copia os dados de um vetor para outro? Provavelmente faria algo assim:
1º→ Garante que o vetor a ser copiado está preenchido;
2º→ Cria um vetor do mesmo tamanho que o vetor a ser copiado;
3º→ Usa uma estrutura de repetição para iterar nos 2 vetores ao mesmo tempo, fazendo as cópias dos dados.
Exemplo:
Visto que copiar dados de um vetor para outro é um procedimento bastante comum na programação, a linguagem C# possui maneiras próprias de realizar este procedimento. Neste tutorial, veremos mais 3 maneiras de copiar vetores em C#: métodos CopyTo, Copy e Clone. Todos eles são da classe Array e têm suas próprias particularidades, embora também podem gerar na tela o mesmo resultado que o método lógico visto acima, se esse for o objetivo.
maneira 1: Copy To
O método CopyTo é usado direto no vetor a ser copiado e o vetor que guardará as cópias deve ser previamente inicializado. Este metodo tem sobrecarga, mas funciona de apenas uma maneira. Veja a seguir, a descrição do método traduzida bem como a especificação de seus parâmetros:
Descrição:
"Copia todos os elementos do presente vetor unidimensional para o vetor unidimensional especificado começando do índice especificado do vetor de destino. O índice é especificado como um inteiro de 32bits/64bits" (depende da sobrecarga).
Parâmetros:
array: O vetor unidimensional que é destino dos elementos copiados do presente vetor.
index: um número inteiro que representa o índice do array (destino) no qual o armazenamento começa. Este índice pode ser int ou long (sobrecarga).
Pra quem não sabe, long é um tipo primitivo de dados numéricos inteiros, assim como int. A diferença é que long tem capacidade de representar valores muito maiores do que os comportados por int.
Exemplo 1:
No exemplo a seguir as cópias começam a ser armazenadas no índice 0 (zero) do vetor destino, por este motivo, eles podem ser do mesmo tamanho sem que isso gere problemas.
Exemplo 2:
Se o índice passado for um valor N (para N maior que zero), garanta que o vetor destino seja grande o suficiente para comportar todos so dados copiados, ou seja, tenha um tamanho de ao menos N elementos maior do que o vetor a ser copiado. As posições antes de N continuam com o valor default (no caso de dados inteiros, zero). Veja uma demonstração possível com N = 4:
maneira 2: Copy
Um outro método para copiar um vetor é o método Copy. Também sobrecarregado, este método possui 4 versões, podendo funcionar de 2 maneiras diferentes. No método Copy, o vetor destino também deve ser previamente inicializado.
Descrição 1 ou 2 de 4:
"Copia uma coleção de elementos de um vetor começando no primeiro elemento e os insere no outro vetor começando no primeiro elemento. O comprimento é especificado como um número inteiro de 32bits/64bits" (depende da sobrecarga)
Parâmetros:
sourceArray: O vetor que contém os dados a copiar.
destinationArray: O vetor que recebe os dados copiados.
length: um dado inteiro que representa o número de elementos a copiar (pode ser int ou long)
Exemplo:
Note que o número de elementos a copiar (3º parâmetro) nada mais é que o tamanho do vetor. Pode ser passado tanto valores.Length quanto copiaValores.Length, pois ambos têm o mesmo tamanho.
Descrição 3 ou 4 de 4:
"Copia uma coleção de elementos de um vetor começando no índice especificado do vetor original e insere as copias no outro vetor começando no índice especificado deste vetor destino. O comprimento e os índices são especificados com um número inteiro de 32bits/64bits" (depende da sobrecarga)
Parâmetros:
sourceArray: O vetor que contém os dados a copiar.
sourceIndex: um número inteiro que representa o índice do "sourceArray" no qual a cópia começa
destinationArray: o vetor que recebe os dados
destinationIndex: um número inteiro que representa o índice no "destinationArray" no qual o armazenamento começa
length: valor inteiro de 32bits/64bits (sobrecarga) que representa o número de elementos a copiar
Esta versão do método nos permite escolher de qual posição do vetor original começaremos a cópia dos dados e em qual posição do vetor cópia começamos a armazená-los. Esse recurso deve ser usado com ainda mais cuidado, pois torna o programa mais propício a erros. Lembrando: Comprimentos e índices de vetores nunca são negativos.
Exemplo 1:
Neste exemplo, os dados começam a ser copiados no índice 2 do vetor valores e são armazenados logo no início do vetor copiaValores, índice 0 (zero). Como os vetores têm o mesmo tamanho, sobram duas posições no vetor destino que permanecem com o valor default 0 (zero). Note que os dois vetores do exemplo têm o mesmo tamanho.
Exemplo 2:
Já neste outro exemplo, apesar das cópias também começarem a ser feitas no índice 2 do vetor valores, elas só são armazenadas a partir do índice 1 do vetor copiaValores. Significa que o primeiro e o último elemento continuam com o valor default 0 (zero). Note que os dois vetores do exemplo têm o mesmo tamanho.
maneira 3: Clone
O método Clone é um método para ser usado diretamente em um vetor e nos retorna um objeto, e não um vetor. Por este motivo, usamos (int[]) para fazer uma conversão (casting) do objeto em um vetor de tipo adequado à situação. Já que nosso vetor copiaValores, que vai receber o retorno, é do tipo int, convertemos o objeto em um vetor também tipo int.
Clone é um método sem sobrecarga, sem parâmetros e o vetor destino não é previamente inicializado.
Descrição:
"Cria uma cópia superficial do vetor"
Algumas propriedades podem não estar mais disponíveis na cópia. Porém, é suficiente quando queremos apenas os dados.
Comentários