【问题标题】:What are the benefits of List<T>.Find over alternatives?List<T>.Find 的好处是什么?
【发布时间】:2009-01-21 11:01:01
【问题描述】:

最近我用一个谓词来描述搜索逻辑,并把它传递给了几个List的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);
}

除了“更少的代码”之外,使用上述方法而不是替代方法有什么好处吗?

我对性能特别感兴趣。

谢谢

【问题讨论】:

    标签: c# .net performance


    【解决方案1】:

    使用 LINQ 查找的好处:它在 .NET 2.0 中可用 LINQ 优于 Find 的优点:与其他序列的一致性;查询表达式语法等

    Find优于BinarySearch的好处:列表不必排序,只需要相等比较 BinarySearch 优于 Find:BinarySearch 是 O(log n);查找是 O(n)

    在 foreach 循环中查找的好处:紧凑且不重复自己 foreach 循环对 Find 的好处:您想要执行的任何其他自定义处理

    其中,只有 Find 与 BinarySearch 有任何真正的性能差异。当然,如果您可以从 List&lt;T&gt; 更改为 Dictionary&lt;TKey,TValue&gt;,那么查找元素将变得摊销 O(1) ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多