我有两个不同类别的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?你们会推荐什么来加快速度呢?或者我在速度方面碰到了一堵砖墙?
答案 0 :(得分:1)
如果bar.Foos and foo.Bars
是属性,则在循环
var list1=bar.Foos;
var list2=foo.Bars;
为bar.Foos
和foo.Bars
提供初始容量也会很好。
答案 1 :(得分:1)
你也可以在List上使用Union扩展,因为只要你的对象具有可比性(或者你已经覆盖了GetHashCode),它就可以避免重复。
bar.Foos = bar.Foos.Union(Program.data.Foos.list).ToList()
答案 2 :(得分:1)
如this question中所述,您可以查看正在进行的操作的渐近复杂性,看看您是否可以重新设计并以某种方式使用一种为这些操作提供较少渐近复杂度的集合,或者您可以尝试使用this question中提到的任务并行库在某些线程或进程之间划分工作。