最近我使用谓词来描述搜索逻辑并将其传递给几个列表的Find方法。
foreach (IHiscoreBarItemView item in _view.HiscoreItems)
{
Predicate<Hiscore> matchOfHiscoreName =
(h) => h.Information.Name.Equals(item.HiscoreName);
var current = player.Hiscores.Find(matchOfHiscoreName);
item.GetLogicEngine().ForceSetHiscoreValue(current as Skill);
var goal = player.Goals.Find(matchOfHiscoreName);
item.GetLogicEngine().ForceSetGoalHiscoreValue(goal as Skill);
}
除了“少代码”之外,使用上述方法替代替代方案是否有任何好处。
我对表现特别感兴趣。
由于
答案 0 :(得分:12)
查找使用LINQ的好处:它在.NET 2.0中可用 LINQ over Find的好处:与其他序列的一致性;查询表达式语法等
查找BinarySearch的好处:列表不必排序,您只需要进行相等比较 BinarySearch优于Find:BinarySearch是O(log n);找到是O(n)
查找foreach循环的好处:紧凑而不重复自己 获取foreach循环的好处:查找:您要执行的任何其他自定义处理
其中,只有Find vs BinarySearch有任何真正的性能差异。当然,如果您可以从List<T>
更改为Dictionary<TKey,TValue>
,那么查找元素将会摊销O(1)......