J'ai rencontré du code (nouveau code) qui utilise ce que j'appelle des «tableaux parallèles» ou des listes. Cela signifie qu'il y a 2 tableaux qui contiennent des données liées et qui sont liés par leur position (index) dans le tableau.
Je trouve cela déroutant et sujet à toutes sortes d'erreurs. La solution que je propose normalement est de créer un objet appelé Company
avec les champs CompanyId et CompanyName.
Un exemple bien réel:
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]);
}
Ces tableaux parallèles sont-ils considérés comme une mauvaise pratique ?
Réponses:
Voici quelques raisons pour lesquelles quelqu'un pourrait utiliser des tableaux parrel:
Je ne vois aucune raison impérieuse de le faire dans ce cas ... et il y a probablement de meilleures options dans tout ce qui précède ou ne sont pas si utiles dans un langage de haut niveau.
la source
J'ai été coupable d'utiliser des tableaux parallèles . Parfois, vous êtes tellement plongé dans la structure que vous ne voulez pas penser à la résumer. L'abstraction peut être un peu plus difficile à refactoriser, vous êtes donc réticent à vous lancer directement jusqu'à ce que vous ayez prouvé ce dont vous avez vraiment besoin.
À ce stade, il vaut la peine d'envisager une refactorisation pour résumer les détails. Souvent, la principale raison pour laquelle j'hésite à le faire, c'est qu'il est difficile de penser à un bon nom.
Si vous pouvez voir un bon moyen d'abstraire des tableaux parallèles, faites-le à chaque fois. Mais ne vous paralysez pas en refusant de les toucher. Parfois, un petit code sale est le meilleur tremplin vers un excellent code.
la source
Ce modèle est parfois également appelé structure de tableaux (par opposition à tableau de structures), et est extrêmement utile lors de la vectorisation de code. Plutôt que d'écrire un calcul qui s'exécute sur une seule structure et d'en vectoriser des bits, vous écrivez le calcul comme vous le feriez normalement, sauf avec les éléments intrinsèques SSE afin qu'il s'exécute sur 4 structures au lieu d'une. C'est généralement plus facile et presque toujours plus rapide. Le format SoA rend cela très naturel. Il améliore également l'alignement, ce qui accélère les opérations de mémoire SSE.
la source