我在foreach循环中有一个foreach循环,如下所示:
// Item is an abstract class. Item1, Item2, etc. are his heirs.
List<Item> allItems = new List<Item> { new Item1(), new Item2(), new Item3(), new Item4() };
List<Type> affectedItems = new List<Type> { typeof(Item1), typeof(Item3) };
foreach(Item i in allItems)
foreach(Type t in affectedItems)
if(i.GetType().Equals(t))
{
// does something
}
Run Code Online (Sandbox Code Playgroud)
如何改进我的代码,以便内循环不会浪费那么多时间检查列表中不存在的项目?
Where,Any)是一个额外的循环.您需要最小化循环次数(尤其是嵌套循环次数),在您的情况下,最好的方法是使用快速查找数据结构:
List<Item> allItems = new List<Item>{ new Item1(), new Item2(), new Item3(), new Item4() };
HashSet<Type> affectedItems = new HashSet<Type>(){ typeof(Item1), typeof(Item3) };
foreach (Item i in allItems)
{
if (affectedItems.Contains(i.GetType()))
{
// Do Something
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是最快的方法,循环次数最少,最多可达0.02毫秒,而其他方法则需要达到0.7.
一个快速的提醒,只要你有循环过程,并要优化一下数据结构使用像HashSet,Dictionary,Lookup,等.
| 归档时间: |
|
| 查看次数: |
509 次 |
| 最近记录: |