Sco*_*ach 3 c# linq binary-search
我有两个系列,每个系列包含大约40,000个项目.
列表2中的元素通过外键链接到列表1的元素.
对于列表一的每个元素,我想在列表二中找到相应的元素.
像这样的东西:
foreach(var item in list1)
{
var match = list2.Where(child => child.ID == item.ChildID).FirstOrDefault();
item.Child = match;
}
Run Code Online (Sandbox Code Playgroud)
这有效,但它很慢.
现在,list1和list2都是按照这些键从数据库中排序的.因此list1按ChildID排序,list2按ID排序(相同值).
我认为二进制搜索会大大提高速度,但我在某处读到了Linq会在Where子句中为列表选择最合适的策略.也许我需要明确地转换为排序列表?或者我可能需要使用比较器实现自定义二进制搜索算法?
任何见解都表示赞赏.
谢谢.
jer*_*lan 11
为什么不使用加入?
var query =
from a in list1
join b in list2 on a.ChildID equals b.ID
select new {Item1 = a, Item2 = b};
foreach(var item in query)
{
item.Item1.Child = item.Item2;
}Run Code Online (Sandbox Code Playgroud)