gpt4 book ai didi

c# - 字符串 s[s.Length-1] 与 s.Last()

转载 作者:行者123 更新时间:2023-11-30 19:40:32 27 4
gpt4 key购买 nike

Q1) 我想知道调用 s.Last() linq 扩展方法是否与执行 s[s.Length-1] 一样有效。我更喜欢第一个选项,但我不知道该实现是否利用了当前类型。

Q2) 这可能是另一个有趣的问题。 linq 扩展方法在使用时是否利用了类型,或者它们只是将对象视为 IEnumerable

最佳答案

不,它不会像直接索引那样高效,这是 O(1)。我们可以在reference source中看到对于 Enumerable.Last :

    public static TSource Last<TSource>(this IEnumerable<TSource> source) {
if (source == null) throw Error.ArgumentNull("source");
IList<TSource> list = source as IList<TSource>;
if (list != null) {
int count = list.Count;
if (count > 0) return list[count - 1];
}
else {
using (IEnumerator<TSource> e = source.GetEnumerator()) {
if (e.MoveNext()) {
TSource result;
do {
result = e.Current;
} while (e.MoveNext());
return result;
}
}
}
throw Error.NoElements();
}

String不执行IList<char>它将转到使用枚举器的分支,要求检查所有字符,直到找到最后一个字符(即 O(n))。

如您所见,在某些情况下,LINQ 方法会考虑更有效的方式来访问各种接口(interface)提供的数据。其他示例包括 First , Count , 和 ElementAt .

关于c# - 字符串 s[s.Length-1] 与 s.Last(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23003174/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com