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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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!