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!