Я сталкивался с кодом (новым кодом), который использует то, что я называю 'Parallel Arrays' или Lists. Это означает, что есть 2 массива, которые содержат связанные данные и связаны их положением (индексом) в массиве.
Я считаю это запутанным и подверженным всевозможным ошибкам. Решение, которое я обычно предлагаю, состоит в создании объекта Company
с полями CompanyId и CompanyName.
Очень реальный пример:
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]);
}
Эти параллельные массивы считаются плохой практикой ?
Ответы:
Вот несколько причин, по которым кто-то может использовать массивы parrel:
Я не вижу никаких веских причин делать это в этом случае ... и, вероятно, есть лучшие варианты во всем вышеперечисленном или они не очень полезны на языке высокого уровня.
источник
Я был виновен в использовании параллельных массивов . Иногда вы настолько погружаетесь в структуру, что не хотите думать о том, как ее абстрагировать. Рефакторинг абстракции может быть немного сложнее, поэтому вы неохотно запускаете его, пока не докажете, что вам действительно нужно.
На этом этапе стоит подумать о рефакторинге, чтобы абстрагироваться от деталей. Часто главная причина, по которой я не хочу этого делать, это то, что трудно придумать хорошее имя.
Если вы видите хороший способ абстрагирования параллельных массивов, делайте это каждый раз. Но не парализуйте себя, отказываясь прикасаться к ним. Иногда немного грязный код - лучший шаг к хорошему коду.
источник
Этот шаблон иногда также называют структурой массивов (в отличие от массива структур) и чрезвычайно полезен при векторизации кода. Вместо того, чтобы писать вычисления, которые выполняются на одной структуре, и векторизовать их биты, вы пишете вычисления, как обычно, за исключением встроенных функций SSE, чтобы они выполнялись на 4 структурах вместо одной. Обычно это проще и почти всегда быстрее. Формат SoA делает это очень естественным. Это также улучшает выравнивание, что ускоряет работу памяти SSE.
источник