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进行区分,计数将在另一个表中.
没有父母会有任何计数,只有孩子和叶子才算数
表格架构:

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