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

时间:2011-10-06 14:00:10

标签: c# linq list

我有两个不同类别的2个列表。为此我们可以称他们为Foo和Bar。 Foo列表包含每个Foo所属的条形图。 Bars列表包含Bar所属的所有Foos。

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

我目前正在使用:

//  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个Foos和~5000个条。通过另一个最常用的循环,这需要大约3秒才能完成,并且看起来效率很低。

有没有更快的方法来实现这一目标?可能与Linq?你们会推荐什么来加快速度呢?或者我在速度方面碰到了一堵砖墙?

3 个答案:

答案 0 :(得分:1)

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

之前为它们进行初始分配
var list1=bar.Foos; 
var list2=foo.Bars;

bar.Foosfoo.Bars提供初始容量也会很好。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

this question中所述,您可以查看正在进行的操作的渐近复杂性,看看您是否可以重新设计并以某种方式使用一种为这些操作提供较少渐近复杂度的集合,或者您可以尝试使用this question中提到的任务并行库在某些线程或进程之间划分工作。

相关问题