我一直在尝试使用所谓的“并行数组”或列表的代码(新代码)。意味着有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]);
}
这些并行数组是否被认为是不好的做法?
9
只是进一步证明,还没有发明出无法编写Fortran的语言。
—
andy mango
进行这样的操作可能(非常重要)具有缓存优势(尽管您需要连续的数组而不是链表),这在与“面向数据的设计”相关的游戏编程中已变得颇为流行。但是,这似乎不适用于您的情况。看起来您在制作性能关键代码。
—
德里克·埃尔金斯
@DerekElkins ...有趣的是,您的评论后面有一条与Fortran代码进行了比较。Fortran的早期版本缺乏对用户定义的结构的支持,即使添加了惯用的Fortran代码也使用多个属性数组,而不是结构数组。这通常被认为是Fortran被认为是最快的语言的一部分。
—
Jules
与这个问题相关的一种思维:许多功能语言都积极鼓励使用此类列表。它们具有通常称为zip的功能,可以将它们转换为元组列表。您的代码看起来像C#。最新版本的C#增加了对一流元组的支持。因此,我想知道他们是否在某个地方添加了一个zip函数,可以自动将您的列表放入有用的结构中吗?
—
Jules
好吧,有时候有理由故意使用两个数组,但是在所有案例的99%中,我已经看到了,唯一的原因是原始作者不愿引入包容的数据结构。
—
布朗