这两种方法之间的效率更高
object foundItem = (from m in myList where m.ID == id select m).FirstOrDefault();
或
Dictionary<string, object> dict = myList.ToDictionary(m => m.ID, m => m);
dict.TryGetValue(id, out foundItem);
答案 0 :(得分:4)
如果您只是进行一次查找,那么非字典查找会更快,因为它可以避免构建字典的开销。
如果您要在同一数据集上进行大量查找,则字典更快,因为它是一种专门设计用于通过单个键快速查找的数据结构。您执行的查找越多,构建字典的开销就越大。
答案 1 :(得分:2)
除了已经指出的内容之外,这两个代码块并不完全相同。在第一个例子中,'found'将是一个IEnumerable,在第二个例子中它将是一个bool,foundItem将是存储在myList中的任何内容。
答案 2 :(得分:1)
我猜你的第一个会是最快的,因为它很可能不需要遍历你的整个列表。我会略微修改它看起来更像这样:
object found = myList.FirstOrDefault(m => m.ID == id);
答案 3 :(得分:0)
好吧,当我有一个大型列表和大量TryGetValues时,我使用第二种方法。
我的经验是,在这些情况下,这种情况会更快。
单个查找的第一个更快。
我从未使用过秒表或类似的东西来证明这一点,所以我无法告诉你收支平衡点在哪里。