更快地访问List <int>的最后一个元素和第一个元素

Chr*_*tos 9 c#

我使用的语言是C#.

List<int> numbers = new List<int>();
Run Code Online (Sandbox Code Playgroud)

是一个整数列表,我们想用它们来做一些计算.访问列表的第一个元素是否更快?

numbers[0]
Run Code Online (Sandbox Code Playgroud)

或者作为

numbers.First()
Run Code Online (Sandbox Code Playgroud)

此外,如果我们想要访问列表的最后一个元素,则访问它的速度会更快

numbers[numbers.Count-1]
Run Code Online (Sandbox Code Playgroud)

或者作为

numbers.Last()
Run Code Online (Sandbox Code Playgroud)

Ser*_*kiy 19

IEnumerable<T>扩展检查源的类型,当你做First()Last().如果source是IList<T>则使用索引:

IList<TSource> list = source as IList<TSource>;
if (list != null)
{
    if (list.Count > 0)
    {
        return list[0];
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,不会创建枚举器,性能几乎相同.但简单的索引当然会更快.

  • @ChristosPaisios nope,`list.Count`只返回内部数组的大小,用于存储项目.它不会一个接一个地枚举元素.Btw`Count()`扩展使用与`First()`相同的方法 - 如果source是`ICollection`那么它将返回`Count`属性值,并且不会枚举任何内容. (4认同)
  • `List`的@ChristosPaisios`Count`属性是`O(1)`,所以当列表变长时,它不需要更多时间.注意`IEnumerable`的`Count()`**函数**可以枚举(实际上需要计算项目). (2认同)