Ich habe auf Code gestoßen (neuen Code), der das verwendet, was ich "Parallele Arrays" oder "Listen" nenne. Dies bedeutet, dass es 2 Arrays gibt, die verwandte Daten enthalten und durch ihre Position (Index) im Array verknüpft sind.
Ich halte dies für verwirrend und fehleranfällig. Die Lösung, die ich normalerweise vorschlage, besteht darin, ein Objekt mit dem Namen zu erstellenCompany
mit den Feldern CompanyId und CompanyName .
Ein sehr reales Beispiel:
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]);
}
Werden diese parallelen Arrays als schlechte Praxis angesehen ?
Antworten:
Hier sind einige Gründe, warum jemand Parrel-Arrays verwenden könnte:
In diesem Fall sehe ich keinen zwingenden Grund, dies zu tun ... und es gibt wahrscheinlich bessere Optionen in allen oben genannten Fällen oder sie sind in einer Hochsprache nicht so nützlich.
quelle
Ich habe mich schuldig gemacht, parallele Arrays verwendet zu haben . Manchmal steckt man so sehr in der Struktur, dass man nicht darüber nachdenken möchte, wie man sie abstrahiert. Abstraktion kann etwas schwieriger umzugestalten sein, sodass Sie nur ungern darauf zugreifen, bis Sie bewiesen haben, was Sie wirklich brauchen.
An diesem Punkt lohnt es sich jedoch über eine Umgestaltung nachzudenken, um die Details zu abstrahieren. Oft ist es der Hauptgrund, warum ich es nicht gerne mache, dass es schwierig ist, sich einen guten Namen auszudenken.
Wenn Sie eine gute Möglichkeit finden, parallele Arrays zu abstrahieren, tun Sie dies jedes Mal. Aber lähmen Sie sich nicht, indem Sie sich weigern, sie zu berühren. Manchmal ist ein wenig schmutziger Code das beste Sprungbrett für großartigen Code.
quelle
Dieses Muster wird manchmal auch als Struktur von Arrays bezeichnet (im Gegensatz zu Array von Strukturen) und ist beim Vektorisieren von Code äußerst nützlich. Anstatt eine Berechnung zu schreiben, die auf einer einzelnen Struktur ausgeführt wird, und Bits davon zu vektorisieren, schreiben Sie die Berechnung wie gewohnt, mit Ausnahme der SSE-Eigenheiten, sodass sie auf 4 statt auf einer Struktur ausgeführt wird. Dies ist normalerweise einfacher und fast immer schneller. Das SoA-Format macht dies sehr natürlich. Es verbessert auch die Ausrichtung, wodurch die SSE-Speicheroperationen schneller werden.
quelle