最快的方式导航和添加项目到两个不同的列表

本文关键字:两个 列表 方式 导航 项目 添加 | 更新日期: 2023-09-27 18:10:31

我有2个不同类别的2个列表。为此,我们可以称它们为Foo和Bar。Foo的列表包含每个Foo所属的bar。Bar列表包含Bar所属的所有foo。

我需要一种快速有效的方法来循环遍历两个列表,并将每个项目添加到另一个列表。

我正在使用:

//  Add the List of Zones to the Vehicles
foreach (Foo foo in Program.data.Foos.list)
{
    foreach (Bar bar in Program.data.Bars.list)
    {
        bar.Foos.Add(foo);
        foo.Bars.Add(bar);
    }
} 

然而,对于我的数据集,我有~5000个foo和~5000个bar。这需要大约3秒的时间来迭代另一个最foreach循环,并且看起来相当低效。

有没有更快的方法来完成这个?可能是Linq?你们有什么建议可以加快速度?还是说我在速度上遇到了瓶颈?

最快的方式导航和添加项目到两个不同的列表

如果bar.Foos and foo.Bars是属性,则在loop

之前对它们进行初始赋值
var list1=bar.Foos; 
var list2=foo.Bars;

给出bar.Foosfoo.Bars的初始容量也很好。

正如这个问题所解释的,你可以看看你正在做的操作的渐近复杂性,看看你是否可以重新设计,并以某种方式使用一种类型的集合,为这些操作提供更少的渐近复杂性,或者你可以尝试如果你能以某种方式将工作分配给一些线程或进程,使用任务并行库在这个问题中提到的

你也可以在List上使用Union扩展,因为它可以避免重复,只要你的对象是可比的(或者你已经覆盖了GetHashCode)

bar.Foos = bar.Foos.Union(Program.data.Foos.list).ToList()