Me he encontrado con un código (nuevo código) que usa lo que llamo 'Arreglos Paralelos' o Listas. Lo que significa que hay 2 matrices que contienen datos relacionados y están vinculados por su posición (índice) en la matriz.
Considero esto confuso y propenso a todo tipo de errores. La solución que normalmente propongo es crear un objeto llamado Company
con los campos CompanyId y CompanyName.
Un ejemplo muy 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]);
}
¿Estas matrices paralelas se consideran una mala práctica ?
Respuestas:
Aquí hay algunas razones por las cuales alguien podría usar matrices parrel:
No veo ninguna razón convincente para hacer esto en este caso ... y es probable que haya mejores opciones en todo lo anterior o que no sean tan útiles en un lenguaje de alto nivel.
fuente
He sido culpable de usar matrices paralelas . A veces estás tan metido en la estructura que no quieres pensar en cómo abstraerla. La abstracción puede ser un poco más difícil de refactorizar, por lo que eres reacio a lanzarla directamente hasta que hayas demostrado lo que realmente necesitas.
En ese punto, vale la pena considerar la refactorización para abstraer los detalles. A menudo, la razón principal por la que me resisto a hacerlo es que es difícil pensar en un buen nombre.
Si puede ver una buena manera de abstraer las matrices paralelas, hágalo siempre. Pero no se paralice negándose a tocarlos. A veces, un pequeño código sucio es el mejor trampolín para un gran código.
fuente
Este patrón a veces también se llama Estructura de matrices (en oposición a la matriz de estructuras), y es extremadamente útil al vectorizar código. En lugar de escribir un cálculo que se ejecute en una sola estructura y vectorizar bits del mismo, debe escribir el cálculo como lo haría normalmente, excepto con intrínsecos SSE para que se ejecute en 4 estructuras en lugar de una. Esto suele ser más fácil y casi siempre más rápido. El formato SoA lo hace muy natural. También mejora la alineación, lo que acelera las operaciones de memoria SSE.
fuente