Linq查找下面发生了什么

Sar*_*rah 0 c# linq

我在LINQ方面的经验非常有限,想了解这段代码如何获取价值。它是在整个列表中进行搜索还是在列表中命中确切的记录,这是因为alternateId = Names.ElementAt(n).它在SQL中对我来说看起来像是“ Where子句”。但这可能有所不同。

只是试图了解完整列表搜索的成本(如果发生了这种情况)

MapList.Find(x => x.AlternateId == Names.ElementAt(n).ToString()).MyColumValue;
Run Code Online (Sandbox Code Playgroud)

Adr*_*ian 5

Find(Predicate<T>) 不是 LINQ的一部分,而是通用集合类型的方法List<T>。根据文档,它将执行线性搜索,直到找到与谓词匹配的第一个元素。

该方法执行线性搜索。因此,此方法是O(n)运算,其中n是Count。


LINQ方法Names.ElementAt(n)是O(1)或O(n),具体取决于的类型Names。如果正在实现IList<T>(因此支持随机访问),则为O(1)。其他ElementAt枚举Names直到返回 n 元素。