Tag Archives: CopyTo

C# – Mesclando Arrays (Merge Arrays)

Mais um código da classe “utilitária”. Como várias das funções do Framework ainda retornar nativamente arrays (lembrando que nas primeiras versões do .NET Framework, os Generics não existiam), é comum precisarmos unir Arrays de tipos primitivos, um trabalho nada usual e que atualmente com as listas tipadas tornaram-se bem mais fácil de fazer.

O problema é que geralmente temos que apelar a loops para fazer esse tipo de trabalho, o que acaba por “sujar” um pouco o código, já que esse tipo de tarefa não está vinculada a uma lógida de negócios, podendo ser classificada como um dificuldade técnica.

O código abaixo mostra um exemplo de como fazer o merge utilizando algumas funções auxiliares da classe Array:

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
 
namespace MergeArrays
{
	public class Program
	{
		public static void Main(string[] args)
		{
			string[] filesInTemp = Directory.GetFiles(@"C:\temp");
			string[] filesInTem2 = Directory.GetFiles(@"C:\temp2");
			string[] allFiles = new string[filesInTemp.Length + filesInTem2.Length];
 
			filesInTemp.CopyTo(allFiles, 0);
			filesInTem2.CopyTo(allFiles, filesInTemp.Length);
 
			for (int i = 0; i < allFiles.Length; i++)
			{
				Console.WriteLine("{0} = {1}", i, allFiles[i]);
			}
 
			Console.Read();
		}
	}
}

No exemplo, o código usa o método GetFiles da classe Directory, que retorna um Array de string com os nomes dos arquivos (absoluto, ou seja, com a pasta e tudo) contidos na pasta informada. Dois arrays são montados com os arquivos de duas pastas. Em seguida, um terceiro array é criado com o trabalho dos dois arrays anteriormente preenchidos. O método CopyTo da classe Array faz a mágica de copiar o conteúdo para um novo Array, tomando o cuidado de mencionar o índice correto a partir de onde o Array deve copiar para não sobreescrever nenhum dado. No código, o primeiro copia seu contéudo a partir do índice 0 e o segundo a partir do tamanho (length) do segundo.

Assim, caso for necessário mesclar mais Arrays, o mesmo raciocício pode ser utilizado.

Bom proveito!