什么更快,我应该牺牲Linq标准以达到速度(假设字典查找的速度确实更快)?所以让我详细说明:

我有以下内容:

List<Product> products = GetProductList();

我需要根据某些属性(例如序列号)搜索产品。我可以首先创建一个字典,然后将其填充如下:

Dictionary<string, Product> dict = new Dictionary<string, Product>();
foreach(Product p in products)
{
    dict.Add(p.serial, p);
}

当要找到产品时,请利用词典查找提供的O(1):

string some_serial = ...;
try { Product p = dict[some_serial]; } catch(KeyNotFoundException) { }

或者,使用Linq:

Product p = products.Where(p => p.serial.Equals(some_serial)).FirstOrDefault();

当然,使用DICE方法的缺点是需要更多的记忆空间,更多的编写代码,不那么优雅等(尽管其中大部分是值得商bat的)。假设这是非因素。我应该采用第一种方法吗?

总而言之,我想确认上述LINQ方法的复杂性是否确实是O(n),而且我看不出它会比这更好。

有帮助吗?

解决方案

假设您是从对象的枚举开始的,并且只有一次这样做...

这样做会更快 Where 方法与添加 Dictionary<TKey,TValue> 然后看一下。原因是字典方法是 不是 o(1)。在这种情况下,您将项目添加到字典中,然后查找。添加零件是o(n),与 Where 带有其他内存开销的方法。

要注意的另一个小点是 Dictionary<TKey,TValue> 不是真正的O(1)。相反,它接近o(1),但在某些情况下可以降低性能(例如,大量冲突键)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top