Wpadłem na kod (nowy kod), który używa tego, co nazywam „macierzami równoległymi” lub listami. Oznacza to, że istnieją 2 tablice, które zawierają powiązane dane i są powiązane ich pozycją (indeksem) w tablicy.
Uważam to za mylące i podatne na wszelkiego rodzaju błędy. Rozwiązaniem, które zwykle proponuję, jest utworzenie obiektu wywoływanego Company
z polami CompanyId i CompanyName.
Bardzo prawdziwy przykład:
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]);
}
Czy te równoległe tablice są uważane za złą praktykę ?
Odpowiedzi:
Oto kilka powodów, dla których ktoś może użyć tablic parrel:
Nie widzę żadnego ważnego powodu, aby to zrobić w tym przypadku ... i prawdopodobnie są lepsze opcje we wszystkich powyższych przypadkach lub nie są tak przydatne w języku wysokiego poziomu.
źródło
Byłem winny używania równoległych tablic . Czasami tak bardzo lubisz struktury, że nie chcesz myśleć o tym, jak ją wyodrębnić. Abstrakcji może być nieco trudniejsza do refaktoryzacji, więc nie masz ochoty jej uruchamiać, dopóki nie udowodnisz, czego naprawdę potrzebujesz.
W tym momencie warto zastanowić się nad refaktoryzacją w celu wyodrębnienia szczegółów. Często największym powodem, dla którego nie chcę tego robić, jest to, że trudno wymyślić dobre imię.
Jeśli widzisz dobry sposób na wyodrębnienie równoległych tablic, zrób to za każdym razem. Ale nie paraliżuj się, nie dotykając ich. Czasami trochę brudnego kodu jest najlepszym krokiem do dobrego kodu.
źródło
Ten wzorzec jest czasem nazywany również Strukturą tablic (w przeciwieństwie do Tablicy struktur) i jest niezwykle przydatny podczas wektoryzacji kodu. Zamiast pisać obliczenia, które działają na pojedynczej strukturze i wektoryzować jego bity, piszesz obliczenia w normalny sposób, z wyjątkiem wewnętrznych elementów SSE, tak aby działały na 4 strukturach zamiast jednej. Jest to zwykle łatwiejsze i prawie zawsze szybsze. Format SoA sprawia, że jest to bardzo naturalne. Poprawia również wyrównanie, co przyspiesza operacje pamięci SSE.
źródło