Eu estive correndo em código (novo código) que usa o que eu chamo de 'Parallel Arrays' ou Listas. Ou seja, existem 2 matrizes que contêm dados relacionados e são vinculadas por sua posição (índice) na matriz.
Considero isso confuso e propenso a todos os tipos de erros. A solução que eu normalmente proponho é criar um objeto chamado Company
com os campos CompanyId e CompanyName.
Um exemplo muito real:
List<string> companyNames;
List<int> companyIds;
//...They get populated somewhere and we then process
for(var i=0; i<companyNames.Count; i++)
{
UpdateCompanyName(companyIds[i],companyNames[i]);
}
Essas matrizes paralelas são consideradas más práticas ?
Respostas:
Aqui estão algumas razões pelas quais alguém pode usar matrizes parrel:
Não vejo nenhuma razão convincente para fazer isso neste caso ... e provavelmente existem melhores opções em todas as opções acima ou não são tão úteis em um idioma de alto nível.
fonte
Fui culpado de usar matrizes paralelas . Às vezes, você está tanto na estrutura que não quer pensar em como abstraí-la. A abstração pode ser um pouco mais difícil de refatorar, de modo que você reluta em lançá-la diretamente até provar o que realmente precisa.
Nesse ponto, vale a pena considerar a refatoração para abstrair os detalhes. Freqüentemente, a maior razão pela qual estou relutante em fazer isso é que é difícil pensar em um bom nome.
Se você pode ver uma boa maneira de abstrair matrizes paralelas, faça-o sempre. Mas não se paralise, recusando tocá-los. Às vezes, um pouco de código sujo é o melhor trampolim para um ótimo código.
fonte
Às vezes, esse padrão também é chamado de Estrutura de matrizes (ao contrário de Matriz de estruturas) e é extremamente útil ao vetorizar código. Em vez de escrever um cálculo que é executado em uma única estrutura e vetorizá-lo, você escreve o cálculo como faria normalmente, exceto com as intrínsecas do SSE, para que seja executado em 4 estruturas em vez de uma. Isso geralmente é mais fácil e quase sempre mais rápido. O formato SoA torna isso muito natural. Também melhora o alinhamento, o que torna as operações de memória SSE mais rápidas.
fonte