Existe uma função interna no .NET 2.0 que terá duas matrizes e as mesclará em uma matriz?
As matrizes são do mesmo tipo. Estou obtendo essas matrizes de uma função amplamente usada na minha base de código e não posso modificar a função para retornar os dados em um formato diferente.
Estou procurando evitar escrever minha própria função para realizar isso, se possível.
Array.Resize
, na verdade, não redimensiona a matriz, ela a copia. É por isso que o primeiro parâmetro é by-ref (o que significa que seu primeiro código provavelmente não será compilado).No C # 3.0, você pode usar o método Concat do LINQ para fazer isso facilmente:
No C # 2.0, você não tem uma maneira direta, mas o Array.Copy é provavelmente a melhor solução:
Isso poderia ser facilmente usado para implementar sua própria versão do
Concat
.fonte
Use LINQ :
Lembre-se de que isso removerá duplicatas. Se você deseja manter duplicatas, use Concat.
fonte
Se você não deseja remover duplicatas, tente isso
Use LINQ:
fonte
Primeiro, certifique-se de se perguntar "Eu realmente deveria estar usando uma matriz aqui"?
A menos que você esteja construindo algo em que a velocidade seja da maior importância, uma Lista digitada
List<int>
provavelmente será o caminho a percorrer. O único momento em que utilizo matrizes é para matrizes de bytes ao enviar coisas pela rede. Fora isso, eu nunca os toco.fonte
List<T>
em APIs públicas: blogs.msdn.com/b/kcwalina/archive/2005/09/26/474010.aspxMais fácil seria usar o LINQ :
Primeiro converta as matrizes em listas e mesclá-las ... Depois disso, basta converter a lista novamente em uma matriz :)
fonte
Eu acho que você pode usar Array.Copy para isso. É necessário um índice de origem e destino, para que você possa anexar uma matriz à outra. Se você precisar se tornar mais complexo do que apenas anexar um ao outro, talvez essa não seja a ferramenta certa para você.
fonte
Supondo que a matriz de destino tenha espaço suficiente,
Array.Copy()
funcionará. Você também pode tentar usar aList<T>
e seu.AddRange()
método.fonte
Pessoalmente, prefiro minhas próprias Extensões de Idioma, que adiciono ou removo à vontade para prototipagem rápida.
A seguir, um exemplo para seqüências de caracteres.
É muito mais rápido que o LINQ e o Concat. Mais rápido ainda, está usando um costume
IEnumerable
invólucro de tipo que armazena referências / ponteiros de matrizes passadas e permite fazer um loop por toda a coleção como se fosse uma matriz normal. (Útil em HPC, Processamento gráfico, Renderização gráfica ...)Seu código:
Para o código inteiro e uma versão genérica, consulte: https://gist.github.com/lsauer/7919764
Nota: Isso retorna um objeto IEnumerable não estendido. Retornar um objeto estendido é um pouco mais lento.
Compilei essas extensões desde 2002, com muitos créditos destinados a pessoas úteis no CodeProject e 'Stackoverflow'. Os lançarei em breve e colocarei o link aqui em cima.
fonte
Todo mundo já deu a sua opinião, mas acho isso mais legível do que a abordagem "usar como método de extensão":
No entanto, ele só pode ser usado ao reunir 2 matrizes.
fonte
Isto é o que eu vim com. Funciona para um número variável de matrizes.
...
fonte
Apenas para que seja anotada como uma opção: se as matrizes com as quais você estiver trabalhando forem de um tipo primitivo - Boolean (bool), Char, SByte, Byte, Int16 (abreviado), UInt16, Int32 (int), UInt32, Int64 (long ), UInt64, IntPtr, UIntPtr, Single ou Double - então você pode (ou deveria?) Tentar usar o Buffer.BlockCopy . De acordo com a página MSDN da classe Buffer :
Usando o exemplo C # 2.0 da resposta do @ OwenP como ponto de partida, ele funcionaria da seguinte maneira:
Quase não há diferença na sintaxe entre
Buffer.BlockCopy
aArray.Copy
que o @OwenP usou, mas isso deve ser mais rápido (mesmo que apenas um pouco).fonte
Caso outra pessoa esteja procurando como mesclar duas matrizes de bytes de imagem:
fonte
Aqui está um exemplo simples usando Array.CopyTo. Eu acho que ele responde à sua pergunta e fornece um exemplo do uso de CopyTo - eu sempre fico confuso quando preciso usar essa função porque a ajuda é um pouco clara - o índice é a posição na matriz de destino onde a inserção ocorre.
Eu acho que você não pode simplificar muito.
fonte
Eu precisava de uma solução para combinar um número desconhecido de matrizes.
Surpreendido ninguém forneceu uma solução usando
SelectMany
comparams
.Se você não deseja itens distintos, basta remover distintos.
Nota: Definitivamente, não há garantia de pedido ao usar distintos.
fonte
Suponho que você esteja usando seus próprios tipos de matriz em oposição às matrizes .NET internas:
Outra maneira de fazer isso seria usar a classe ArrayList incorporada.
Ambos os exemplos são c #.
fonte
Usando o código acima, duas matrizes podem ser facilmente mescladas.
fonte
Método criado e de extensão para manipular null
fonte
Se você tiver as matrizes de origem em uma matriz, poderá usar o SelectMany :
dá
Provavelmente, esse não é o método mais rápido, mas pode ser adequado, dependendo do caso de uso.
fonte
Este código funcionará para todos os casos:
fonte
Tente o seguinte:
fonte