代码之家  ›  专栏  ›  技术社区  ›  Llyle

列表<T>的好处是什么?寻找替代方案?

  •  0
  • Llyle  · 技术社区  · 17 年前

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

    除了“更少的代码”之外,使用上述方法比使用其他方法有什么好处吗。

    我对表演特别感兴趣。

    谢谢

    1 回复  |  直到 17 年前
        1
  •  12
  •   Jon Skeet    17 年前

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

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

    通过foreach循环查找的好处:紧凑性和不重复自己 foreach循环优于Find的好处:您想要执行的任何其他自定义处理

    其中,只有Find与BinarySearch有真正的性能差异。当然,如果你能从 List<T> 到 Dictionary<TKey,TValue> 然后找到的元素将被摊销O(1)。。。