删除foreach - c#code-optimization

Gop*_*opi 7 c# optimization foreach ilist

如何优化此代码?

ParentDoglist,ChildDoglistis - Ilist.dogListBox - 列表框

foreach (Dog ParentDog in ParentDoglist)
{
 foreach (Dog ChildDog in ChildDoglist)
 {
  if(ParentDog.StatusID==ChildDog.StatusID)
  dogListBox.Items.Add(new ListItem(ParentDog.Name, ParentDog.Key));
 }
}
Run Code Online (Sandbox Code Playgroud)

编辑: ParentDogTypeList,DogTypeList被重命名为ParentDoglist,ChildDoglist,其中两者彼此无关

if(ParentDog.Key==ChildDog.Key)
Run Code Online (Sandbox Code Playgroud)

被改为

if(ParentDog.StatusID==ChildDog.StatusID)
Run Code Online (Sandbox Code Playgroud)

完整故事:

我需要填充一个下拉菜单,这将回应父子关系.有些狗可能没有任何孩子,这将被称为看门狗.而且我还需要显示该特定类别中的狗的数量

DD看起来像

Parent1
  Child11 (10)
  Child12 (12)
Parent2
  Child21 (23)
  Child22 (20)
Leaf1 (20)
Leaf2 (34)
Run Code Online (Sandbox Code Playgroud)

因此,ParentDoglist将带来所有Child和leaf元素以及count和ChildDogList将具有Parent和leaf ID,因此我可以将相应的Child填充到其Parent并直接绑定叶子.

Parent,Child和Leaf Dog将保存在一个表中,并通过statusid进行区分,计数将在另一个表中.

没有父母会有任何计数,只有孩子和叶子才算数

表格架构:

替代文字

Svi*_*ack 8

您可以对此进行排序ParentDoglistChildDoglist执行线性O(n)查找算法O(n^2).

但是你可以对容器进行排序O((ParentDoglist.Size() + ChildDoglist.Size()) * log2(ParentDoglist.Size() + ChildDoglist.Size())).

然后,如果运行此代码,则算法是最佳的.但是,如果您搜索的时间超过一次,最佳解决方案是对容器进行排序并在线性时间内进行比较,但是如果您的容器可以更改,那么搜索功能会被改变,并且您使用"不止一次的解决方案",您必须使用RB -Tree容器携带这个元素,因为在容器被更改后的正常列表中你无法及时返回到已排序状态O(log(n)).