最快的方式导航和添加项目到两个不同的列表
本文关键字:两个 列表 方式 导航 项目 添加 | 更新日期: 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.Foos
和foo.Bars
的初始容量也很好。
正如这个问题所解释的,你可以看看你正在做的操作的渐近复杂性,看看你是否可以重新设计,并以某种方式使用一种类型的集合,为这些操作提供更少的渐近复杂性,或者你可以尝试如果你能以某种方式将工作分配给一些线程或进程,使用任务并行库在这个问题中提到的
你也可以在List上使用Union扩展,因为它可以避免重复,只要你的对象是可比的(或者你已经覆盖了GetHashCode)
bar.Foos = bar.Foos.Union(Program.data.Foos.list).ToList()